Учитывая следующий фрагмент кода:
#include <iostream>
auto main() -> int {
double x(7.0);
int i{x};
std::cout << "i = " << x << std::endl;
return 0;
}
-
При компиляции в GCC4.9 он компилируется с предупреждением только:
warning: narrowing conversion of ‘x’ from ‘double’ to ‘int’ inside { }
-
Компиляция с Clang3.3 или VС++ 2013 дает ошибку компиляции:
error: type 'double' cannot be narrowed to 'int' in initializer list
error C2397: conversion from 'double' to 'int' requires a narrowing
Вопросы:
-
Какой из компиляторов прав в соответствии со стандартом?
-
Есть ли причина, по которой упомянутые выше компиляторы должны проявлять такое разнообразное поведение?