Я использую компилятор Microsoft Visual Studio 2019 (cl.exe), и он отклоняет некоторый код, принятый и Clang, и GCC, связанный с использованием перечислений в качестве параметров шаблона, где шаблоны специализированы для определенных значений перечисления.
enum Foo {
Bar,
Baz
};
template<enum Foo = Bar> class Clazz {
};
template<> class Clazz<Baz> {
};
Компилятор VC++ сообщает о нескольких ошибках специализации шаблона:
<source>(10): error C2440: 'specialization': cannot convert from 'Foo' to 'Foo'
<source>(10): note: Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
Этот код принят без ошибок как Clang, так и GCC. Это ошибка с VC++?
Замена 'enum Foo' в объявлении шаблона просто 'int' приводит к исчезновению ошибок. Однако это не приемлемый ответ, так как я пытаюсь перенести большую кодовую базу на VC++.