.)

отримследующий код:

#include <type_traits>

template<template<class...> class T, class... U>
struct is_specialization_of : std::false_type{};

template<template<class...> class T, class... U>
struct is_specialization_of<T, T<U...>> : std::true_type{};

template<class T, class U = int>
struct test{};

// (1) ok
static_assert(is_specialization_of<test, test<int>>::value, "1");

template<class T>
using alias = test<T>;

// (2) fails
static_assert(is_specialization_of<alias, alias<int>>::value, "2");

int main()
{
}

Почему (2), т.е.static_assert что использует шаблон псевдонима, сбой?

Чем процесс вывода аргументов шаблона в (2) отличается от процесса в (1)?

Ответы на вопрос(2)

Ваш ответ на вопрос