В С++ 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, что делает его трудным или бессмысленным для поддержки этого? Это простой надзор в стандарте? Что-то еще?
Мне кажется, что если тип enum действительно построен поверх интегрального типа, как указано выше, мы должны иметь возможность отображать не только значения, но и указатели. Мы все еще можем использовать reinterpret_cast<int*>
или приведение в стиле C, но это больший молот, чем я думал, что нам нужно.