onstrutores @Inline e Regra de Uma Definição
Considere os arquivos de origem 1.cpp
#include <iostream>
using namespace std;
struct X
{
X()
{
cout << "1" << endl;
}
};
void bar();
void foo()
{
X x;
}
int main()
{
foo();
bar();
return 0;
}
2.cpp
#include <cstdio>
struct X
{
X()
{
printf("2\n");
}
};
void bar()
{
X x;
}
O programa é compilado a partir desses arquivos bem formado? O que deve estar em sua saída?
Eu esperava um erro do vinculador devido à violação da regra de definição única ou à saída "1 2". No entanto, ele imprime "1 1" quando compilado com g ++ 3.4 e VC 8.
Como isso pode ser explicado?