Sie haben Recht, dass der Standard dies als Fehler behandelt und es Implementierungen ermöglicht, diesen Code abzulehnen.
Implementierungen sind jedoch fast nie erforderlich, um Code zurückzuweisen, der nicht dem Standard entspricht. Sie müssen das Problem diagnostizieren, aber wenn sie das Etikett "Warnung" anhängen und weiterhin den Code akzeptieren, gibt es kein Problem.
In diesem Fall, C++ 11 gemacht perfekt C++ 03 Code in einen Fehler (nicht ganz Ihr Code, aber char ch[] = {x};
verwendet, um gültig zu sein), so Compiler haben einen guten Grund, es als nur zu behandeln eine Warnung: Sie wollen so viel früher gültigen Code als sinnvoll akzeptieren, oder Benutzer haben einen guten Grund, zu einem anderen Compiler zu wechseln.
Warum sollten/können Sie 'ch' nicht mit einer Variablen initialisieren? –
@MagnusHoff C++ 11 verbietet es, Konvertierungen in '{}' einzuschränken. – hvd