Я пытаюсь создать псевдоним шаблона, который нельзя отличить от оригинала.
Итак, я создаю черты для проверки, когда 2 шаблона (не типы) равны:
template <template <class...> class C1,
template <class...> class C2>
struct is_same_template : std::false_type {};
template <template <class...> class C1>
struct is_same_template<C1, C1> : std::true_type {};
Теперь проверьте это:
// Expected alias
template <typename ... Ts> using V_Ts = std::vector<Ts...>; // Variadic
// Fallback alias
template <typename T, typename A> using V = std::vector<T, A>; // Exact count
static_assert(!is_same_template<std::vector, V_Ts>::value); // Alias rejected by gcc/clang
static_assert( is_same_template<std::vector, V>::value); // Alias accepted only for gcc
Демо
Можно ли создать "настоящий" псевдоним?
какой компилятор прав?