g ++ 4.9 und g ++ 5 unterschiedliches Verhalten beim Eingrenzen der Liste
Betrachten Sie diesen Code:
#include <iostream>
int main()
{
int i{10.1}; // narrowing, should not compile
std::cout << i << std::endl;
}
Nach dem C ++ 11-Standard sollte es nicht kompiliert werden (Einengung bei der Klammerinitialisierung ist verboten.)
etzt kompilieren mitg++4.9.2 -std=c++11
gibt nur eine Warnung aus
warning: narrowing conversion of '1.01e+1' from 'double' to 'int' inside { } [-Wnarrowing]
Entferne den-std=c++11
flag gibt eine Warnung bezüglich des Klammer-Init aus, aber keine Verengung:
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
Auf der anderen Seite g ++ 5 kompiliert es nicht, vorausgesetzt du kompilierst mitg++5 -std=c++11
. Jedoch, wenn-std=c++11
wird weggelassen, dann sogarg++5
kompiliert es glücklich und gibt nur eine Warnung in Bezug auf die Klammer init, nicht auf die Verengung:
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
Das obige Verhalten scheint fehlerhaft,g++4.9
sollte den Code nicht kompilieren, und es ist mehr als seltsam, dassg++5
kompiliert es, wenn Sie vergessen, @ anzugeb-std=c++11
. Ist das ein bekanntes Problem?