Zgodnie książki C++ Programming Language (Bjarne Stroustrup), w punkcie 15.2.3 (zasada One Definition) strona nr 425, piszę program, jak poniżej:struct z tej samej nazwie, ale innym członka w C++
file1.cpp
struct S2 { int a; char b; };
file2.cpp
struct S2 { int a; char bb; };
int main(){ return 0;}
Aby skompilować próbowałem poniżej polecenia.
g++ -std=c++11 file1.cpp file2.cpp
i
clang++ -std=c++11 file1.cpp file2.cpp
Oba te polecenia wytwarzania wykonywalny bez żadnych błędów lub ostrzeżenia. Ale jak na książkę ten przykład powinien dać błąd.
Nie jestem pewien, czy jest to naruszenie zasady * one definition * (ODR), czy nie. Jeśli jednak tak jest, kompilator nie musi podawać błędu - oznacza to tylko, że programista popełnił błąd. –
@MartinBonner: tak, jest to wyraźne naruszenie ODR. masz rację. Kompilator nie musi podawać błędu. – Destructor
Nie wstawiaj linków do witryn komercyjnych. –