Comportamento diferente de g ++ 4.9 e g ++ 5 ao restringir na lista de inicialização

Considere este código:

#include <iostream>

int main()
{
    int i{10.1}; // narrowing, should not compile
    std::cout << i << std::endl;
}

De acordo com o padrão C ++ 11, ele não deve ser compilado (é proibido restringir a inicialização entre chaves).

Agora, compilando comg++4.9.2 -std=c++11 apenas emite um aviso

warning: narrowing conversion of '1.01e+1' from 'double' to 'int' inside { } [-Wnarrowing]

Removendo o-std=c++11 flag resulta em um aviso sobre o colchete init, mas não em nenhum estreitamento:

warning: extended initializer lists only available with -std=c++11 or -std=gnu++11

Por outro lado, g ++ 5não compila, desde que você compile comg++5 -std=c++11. No entanto, se-std=c++11 é omitido, mesmog++5 o compila alegremente, dando apenas um aviso relacionado ao init brace, não ao estreitamento:

warning: extended initializer lists only available with -std=c++11 or -std=gnu++11

O comportamento acima parece com erros,g++4.9 não deve compilar o código, e é mais do que estranho queg++5 compila se você esquecer de especificar-std=c++11. É um problema conhecido?

questionAnswers(3)

yourAnswerToTheQuestion