Специализация шаблонного параметра алиасом

#include <iostream>

template <template <typename> class>
struct X {
  X() { std::cout << "1"; }
};

template <typename>
struct Y {};

template <typename T>
using Z = Y<T>;

template <>
struct X<Y> {
  X() { std::cout << "2"; }
};

int main() {
  X<Y> x1;
  X<Z> x2;
}

Почему gcc последний выводит 22, а clang - 21? Как правильно и почему?


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