Алиас для специализации класса с параметром-шаблоном работает по-разному в gcc и clang

#include <iostream>

template <class>
struct B {};

template <template<class> class>
struct A {
  A() { std::cout << "1\n"; }
};

template <>
struct A<B> {
  A() { std::cout << "2\n"; }
};

template <class T>
using C = B<T>;

int main() {
  A<B>{}, A<C>{};
}

Почему выводы gcc и clang отличаются (godbolt)? Кто прав и почему?

gcc 10.2:

2

2

clang 10.0.0:

2

1


Ответы (1 шт):

Автор решения: HolyBlackCat

Это core issue 1286.

Насколько я понимаю, сейчас прав Clang. Если предложенные по ссылке изменения добавят в стандарт, тогда прав будет GCC.

→ Ссылка