Эквивалент использования псевдонимов для шаблона

C ++ 11 добавил шаблоны псевдонимов, такие как:

 template using identity = T;
 template using EnableIf = typename std::enable_if::type;

Это намного проще в использовании, чем старыйtemplate введите карты, которые дают вам возвращаемое значение в::type поле, потому что даже если ваши аргументы типа зависят от локального контекста, вы неНе нужно сообщать компилятору, что результатом является тип.

По сути, вы поднимаетеtypename от места использования доusing псевдоним.

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

Предположим, у вас есть метафункция, результатом которой был тип или шаблон псевдонима вместо типа. Текущий метод выглядит примерно так:

template
struct my_meta {
  template
  using Template = identity;
};

template
struct my_meta {
  template
  using Template = int;
};

который мы можем затем использовать следующим образом:

template
typename my_meta::template Template
do_stuff( U&& ) { return {}; }

Это лишнееtemplate Ключевое слово в возвращаемом типе существует для устранения неоднозначности возвращаемого значения моей мета-функции - это то, что я хочу исключить.

Есть ли способ указать компилятору, что результатом мета-вычисления является другой псевдоним или шаблон класса в C ++ 11 или C ++ 1y, без использованияtemplate Ключевое слово в месте вызова?

То есть:

template
my_meta_template
do_stuff( U&& ) { return {}; }

или даже

template
void do_more_stuff() {}

template
void do_stuff() {
  // syntax I want: just produce an alias or class template directly:
  do_more_stuff< my_meta_template >();
  // vs what I find is required: the disambiguator:
  do_more_stuff< my_meta::template Template >();
};

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

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