template <typename Type, Type Func>
struct A
{
};
void func();
A<void(), func> a; // same result with A<void(), &func> a;
Этот код компилируется с Clang (включая последнюю версию 8.0.0), но не с GCC (включая последнюю версию 9.1).
GCC говорит: error: 'void()' is not a valid type for a template non-type parameter
Какой компилятор являетсяправильно и почему?
Обновление
Я предполагаю, что GCC не так, потому что следующие компиляции на Clang и GCC:
template <void()>
struct A
{
};
void func();
A<func> a; // same result with A<&func> a;
Так что вопреки тому, что сообщает GCC вВ первом примере void()
представляется «допустимым типом для шаблона не типового параметра»