di cui al Libro Il C++ Programming Language (Bjarne Stroustrup), nella sezione 15.2.3 (La regola Una definizione) pagina no 425, scrivo programma come di seguito:struct con lo stesso nome ma diversi Stati in C++
file1.cpp
struct S2 { int a; char b; };
file2.cpp
struct S2 { int a; char bb; };
int main(){ return 0;}
Per compilare ho provato sotto comando.
g++ -std=c++11 file1.cpp file2.cpp
e
clang++ -std=c++11 file1.cpp file2.cpp
Entrambi questi comandi produrre eseguibili con qualsiasi errore o avviso. Ma come da libro questo esempio dovrebbe dare errore.
Non sono sicuro se si tratta di una violazione della * regola di definizione * (ODR) o meno. Tuttavia, se lo è, il compilatore * non * è richiesto per dare un errore - significa semplicemente che il programmatore ha commesso un errore. –
@ MartinBonner: sì, questa è una chiara violazione dell'ODR. hai ragione. Compilatore non è tenuto a dare un errore – Destructor
Si prega di non inserire collegamenti a siti commerciali. –