Наткнулся на сабж, VS2005
Минимальный пример таков:
Test1.cpp
#include "Test1.h"
#include <string>
class something
{
public:
int a;
std::string sz1;
int b;
std::string sz2;
};
void CTest1::test()
{
something smth;
smth.b = 0x7fffffff;
smth.sz2 = "qwefqwefqwefqwef";
}
Test3.cpp
#include "StdAfx.h"
#include <string>
#include "Test3.h"
class something
{
public:
std::string sz1;
std::string sz2;
int a;
};
void CTest3::test()
{
something smth;
smth.a = 0x7fffffff;
smth.sz1 = "asdfasdfasdfsadf";
smth.sz2 = "rtyjrtyjrtyjrtyjrtyj";
}
int main()
{
CTest1 t1;
CTest3 t3;
t1.test();
t3.test(); //здесь падает на вызове smth.sz1 = "asdfasdfasdfsadf", видимо компилятор/линкер путает структуры
return 0;
}
Ни ерроров, ни ворнингов на 4 уровне.
Отсюда возникает вопрос, каково должно быть поведение компилятора/линкера, если в двух cpp файлах встречаются структуры/классы с одинаковым именем?