2013-09-04 2 views
0

Я читаю последнюю версию C++ книги Stroustrup (4-е издание), а следующий пример из книги не вызывает ошибки.Списки инициализаторов с лимитированной линией с фигурной скобкой C++

#include <iostream> 
using namespace std; 

int main(const int argc, const char* argv[]) { 

    // Narrowing conversion. 
    // According to Stroustrup, an error should happen here 
    // because the curly-brace-delimited initializer 
    // saves us from conversions that lose information. 
    // But after compiling and running the code the output is 7. 
    int i2 {7.2}; 
    cout << i2 << endl; 

    return 0; 
} 

Я использую следующую команду для компиляции кода в системе Gentoo. (g ++ версия: 4.6.3)

g++ -std=c++0x -o output input.cpp 

Почему это не ошибка?

+2

использовать '-pedantic-errors' при компиляции стандартного кода C++ с GCC – Cubbi

+0

К сожалению' -pedantic-errors' вариант не поможет. –

+0

он превратился в ошибку в более новой версии gcc. – Cubbi

ответ

3

Более текущая версия GCC (4.8.1), трактует это как предупреждение:

trash9.cpp: In function 'int main(int, const char**)': 
trash9.cpp:11:14: warning: narrowing conversion of '7.2000000000000002e+0' from 
'double' to 'int' inside { } [-Wnarrowing] 
    int i2 {7.2}; 

Стандарт требует, чтобы вопрос Компилятор «диагностика», так (с правой документацией), это, несомненно, квалифицируется. Компилятор может продолжить компиляцию кода впоследствии.

VC++ делает ближе к тому, что вы, видимо, хотите:

trash9.cpp(11) : error C2397: conversion from 'double' to 'int' requires a narro 
wing conversion 
+0

Я думаю, что некоторое обновление системы поможет. –