В моем понимании код ниже не должен компилироваться, потому что класс enum должен быть явно приведен к целочисленному типу:
enum class MyEnum : int {
enumValue = 0,
... ,
COUNT
};
template<typename EnumType>
class MyClass {
void Bar(int someParameters[EnumType::COUNT]) { ... }
};
MyClass<MyEnum> myObject; // compilation error at template instanciation when using an enum class
Но использование такого преобразования, которое, как я ожидал, будет constexpr, приводит к странной ошибке компиляции с использованием Visual Studio 2015 (РЕДАКТИРОВАТЬ: она работает с g ++, поэтому скорее всего это проблема компилятора VS, а не чего-либо еще)
template<typename EnumType>
class MyClass {
void Bar(int someParameters[static_cast<int>(EnumType::COUNT)]);
};
template<typename EnumType>
void MyClass<EnumType>::Bar(int someParameters[static_cast<int>(EnumType::COUNT)]) { ... }
unable to match function definition 'MyClass<EnumType>(int [])' to existing declaration 'MyClass<EnumType>(int ['function'])'
Как мы можем решить эту проблему компиляции без преобразования класса enum в стандартное перечисление?