enum class E
{};
int main()
{
E e1{ 0 }; // ok
E e2 = 0; // not ok
// error : cannot initialize a variable of
// type 'E' with an rvalue of type 'int'
}
マイコンパイラはclang 4.0
で、オプションは-std=c++1z
です。static_castを使用しないで、厳密に型指定された列挙型を整数で初期化できるのはなぜですか?
E
は厳密に型指定されているため、E e2 = 0;
は問題ありません。しかし、私に驚いたのは、E e1{ 0 };
が大丈夫だということです。
static_cast
のない整数で強く型付けされた列挙型を初期化できるのはなぜですか?リストintializersを用いreferenceをみる
[documentation](http://en.cppreference.com/w/cpp/language/enum)によると、C++ 17以降で許可されています – UnholySheep