Visual Studio 2015, обновление 3. С++ 11\С++ 14.
Для int
:
constexpr int ci1 {50};
constexpr int ci2 {500};
char c1 {ci1}; // OK
char c2 {ci2}; // compilation error
т.е. универсальная и равномерная инициализация может проверять значение в режиме компиляции (от int
до char
). Этот случай был упомянут Бьерном Страуструпом в его книге.
Я ожидал, что это верно для случая double
to int
, но это не работает для Visual Studio 2015 Update 3:
constexpr double cd {4.0};
int i1 {cd}; // compilation error
Сообщение об ошибке:
Преобразование C2397 из double в int требует сужающего преобразования.
Это правильное поведение (для моего второго примера кода) или, может быть, оно специфично для Visual Studio?