Встроенные конструкторы и одно правило определения
Рассмотрим следующие исходные файлы 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;
}
Скомпилирована ли программа из этих файлов правильно? Что должно быть в его выводе?
Я ожидал ошибку компоновщика из-за нарушения правила одного определения или вывода «1 2». Однако он печатает «1 1» при компиляции с g ++ 3.4 и VC 8.0.
Как это можно объяснить?