Der C++ - Standard hat nicht das Konzept eines "fatalen Compiler-Fehler". Programme sind entweder schlecht ausgebildet mit einer erforderlichen Diagnose oder schlecht ausgebildet, ohne dass eine Diagnose erforderlich oder wohlgeformt ist.
In C++ besteht die einzige Anforderung, die der Standard an eine schlecht geformte Programmdiagnose stellt, darin, eine Diagnose anzuzeigen. Der Inhalt dieser Diagnose ist nicht definiert. Was sonst noch neben dieser Diagnose passiert, ist nicht definiert.
Viele Compiler implementieren Erweiterungen des C++ - Standards, die sie kompilieren sollen, um ansonsten schlecht geformte Programme zu kompilieren und eine ausführbare ausführbare Datei zu erzeugen. Wenn sie einem Standard entsprechen, müssen sie lediglich eine Warnmeldung ausgeben (die den Diagnoseanforderungen der C++ - Norm (en) genügt).
In diesem Fall wird eine Warnmeldung ausgegeben, dass Sie eine C++ 14-Funktion verwendet haben. Es hat nun erfolgreich gemacht, was der C++ 11-Standard mit Ihrem schlecht geformten Programm erfordert. Es erzeugt auch eine ausführbare Datei, die das tut, was Ihr Programm tun würde, wenn diese Funktion aus dem C++ 14-Standard verwendet würde: es ist frei, dies zu tun, da der Standard an diesem Punkt keine Einschränkungen für das Programm vorsieht, sobald es ein ist schlecht ausgebildetes C++ 11-Programm.
Wenn Sie diese Option nicht wünschen, haben Compiler oft ein warnings-as-errors
Flag und verschiedene strict
und pedantic
Flags, die Erweiterungen zu dem Standard blockieren, den sie verwenden. Dann unterdrückt der Fehler die Generierung der ausführbaren Datei und Sie werden nicht länger verwirrt sein.
gcc nimmt standardmäßig an, dass Sie den bereitgestellten Code tatsächlich in etwas kompilieren möchten und nicht als Standard-Enforcer fungieren. Er generiert nur dann Fehler, wenn er keine vernünftige Möglichkeit hat, Ihren Code als Programm zu interpretieren, das Ihren Absichten entspricht . Es bietet Flags, um es in einen strikten und pedantischen Modus zu versetzen.
Amüsant, genügt ein einzelnes Leerzeichen Ausdruck der Anforderung eines Diagnose anzuzeigen.Der C++ - Standard kann auf pathologische Weise gelesen werden, um eine schlechte Implementierungsqualität in Ihrem Compiler zu erzeugen: Die Erstellung eines feindlichen Compiler-sicheren Standards ist den Aufwand nicht wert.
Verwenden Sie '-pedantic-errors' für einen Fehler –
@PiotrSkotnicki Sicher, aber wie kann das Programm erstellt und ohne die erforderliche Funktion ausgeführt werden? – DBedrenko
Warum denkst du, dass es ohne die erforderliche Funktion läuft? –