Подтвердить что ты не робот

Неэквивалентность шаблонных типов, использующих псевдонимы шаблонов

Моя цель - записать имя шаблонного типа при определении других типов с параметрами шаблона шаблона. Проблема, с которой я столкнулся, состоит в том, что результирующие типы считаются неэквивалентными.

Для этого я попытался использовать шаблонный "using" псевдоним, чтобы записать имя, указанное в качестве аргумента шаблона шаблона. Затем я ссылаюсь на псевдоним, чтобы восстановить имя. Пример того, где это полезно, - это когда у меня есть шаблонная функция, которая возвращает тип с параметром шаблона шаблона, который должен быть выведен.

В следующем коде показан мой подход:

include <type_traits>

template<typename X>
struct TT {};

template<template<typename> class T>
struct UU {
  template<typename X>
  using name = T<X>;
};

template<template<typename> class T>
struct VV {};

int main() {
  static_assert(std::is_same<
    TT<int>,
    UU<TT>::template name<int>
  >::value, "Templated type instances are distinct");
  static_assert(std::is_same<
    VV<TT>,
    VV<UU<TT>::template name>
  >::value, "Template type instances using template names are distinct");

  return 0;
}

Компиляция следующим образом:

c++ -std=c++14 Test.cpp -o Test

Урожайность:

Test.cpp:20:3: error: static_assert failed "Template type instances using template names are distinct"

Есть ли другой способ записи и использования имен шаблонов?

Может ли кто-нибудь направить меня к той части стандарта, где указано это поведение?

4b9b3361