Wie pro Buch Die C++ Programmiersprache (Bjarne Stroustrup), in Abschnitt 15.2.3 (die Definition Regel) Seite nicht 425, ich schreibe Programm wie folgt:Struktur mit dem gleichen Namen, aber unterschiedlichem Mitglied in C++
file1.cpp
struct S2 { int a; char b; };
file2.cpp
struct S2 { int a; char bb; };
int main(){ return 0;}
ich unter Befehl versucht zu kompilieren.
g++ -std=c++11 file1.cpp file2.cpp
und
clang++ -std=c++11 file1.cpp file2.cpp
Beide dieser Befehl ohne jeden Fehler oder eine Warnung ausführbaren erzeugen. Aber laut Buch sollte dieses Beispiel einen Fehler geben.
Ich bin mir nicht sicher, ob dies eine Verletzung der * eine Definitionsregel * (ODR) ist oder nicht. Wenn dies jedoch der Fall ist, ist der Compiler * nicht * erforderlich, um einen Fehler zu geben - es bedeutet lediglich, dass der Programmierer einen Fehler gemacht hat. –
@MartinBonner: Ja, das ist eine klare Verletzung von ODR. Du hast recht. Compiler ist nicht erforderlich, um einen Fehler zu geben – Destructor
Bitte keine Links zu kommerziellen Websites einfügen. –