Рассмотрим следующие исходные файлы
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;
}
* 1004 файл 2.cpp *
#include <cstdio>
struct X
{
X()
{
printf("2\n");
}
};
void bar()
{
X x;
}
Правильно ли составлена программа из этих файлов? Что должно быть в его выводе?
Я ожидал ошибку компоновщика из-за нарушения правила одного определения или вывода «1 2». Однако он выводит «1 1» при компиляции с g ++ 3.4 и VC 8.0.
Чем это можно объяснить?