Посмотрите на этот простой фрагмент:
enum class Enum1 { Value };
enum class Enum2 { Value };
template <auto> struct Foo;
template <> struct Foo<Enum1::Value> { };
template <> struct Foo<Enum2::Value> { };
Clang компилирует это, но gcc-7.2 не работает:
x.cpp: 5: 20: ошибка: переопределение шаблона структуры Foo < (Enum1) 0 > < > struct Foo {};
Это сообщение об ошибке кажется недействительным, как указано в строке 5, Enum2::Value
.
Какой компилятор прав? Соответствует ли этот код?