C++11 では、厳密に型指定された列挙型 ( enum class
) をその基になる型にキャストできます。しかし、ポインタを同じものにキャストできないようです:
enum class MyEnum : int {};
int main()
{
MyEnum me;
int iv = static_cast<int>(me); // works
int* ip = static_cast<int*>(&me); // "invalid static_cast"
}
なぜこれが必要なのかを理解しようとしています.enumメカニズムについて、これをサポートするのが困難または無意味になるものはありますか? 規格上の単純な見落としですか?他の何か?
列挙型が上記のように整数型の上に真に構築されている場合、値だけでなくポインターもキャストできるはずです。または C スタイルのキャストを引き続き使用できますreinterpret_cast<int*>
が、それは必要だと思っていたよりも大きなハンマーです。