Visual Studio 2015アップデート3. C++ 11 \ C++ 14。 int
についてはユニバーサルで均一な初期化: `double`から` int`
:
constexpr int ci1 {50};
constexpr int ci2 {500};
char c1 {ci1}; // OK
char c2 {ci2}; // compilation error
すなわち、 ユニバーサルで均一な初期化は、コンパイルモード(int
〜char
)の値をチェックできます。この例は、Bjarne Stroustrupによって彼の著書に掲載されました。
は、私は、これはdouble
int
にケースのために真であることを期待、しかしそれは、Visual Studio 2015 Update 3のために動作しません:
constexpr double cd {4.0};
int i1 {cd}; // compilation error
エラーメッセージ:
C2397変換から'double'から 'int'までの範囲は狭くする必要があります 変換
私の2番目のコード例では正しい動作ですか、それともVisual Studio専用ですか?
あなたの投稿にコンパイルエラーを含めてください。 –
ソース値にかかわらず、浮動小数点から整数への無条件絞り込みが行われます。 [\ [dcl.init.list \]/7](http://eel.is/c++draft/dcl.init.list#7)を参照してください。 –
エラーメッセージを追加しました。 –