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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage