Параметры шаблона шаблона и вариативные шаблоны с gcc 4.4

Я использую gcc 4.4 в Debian squeeze. Рассмотрим следующий код.

#include 
#include 
using std::map;
using std::string;

// Args lets the user specify additional explicit template arguments
template  class C,
      typename... Args>
C foo()
{
  C x;
  return x;
}

int main(void)
{
  map a = foo();
}

Итак, идея заключается в том, что T соответствует строке , C соответствует карте , а пакет параметров шаблона Args соответствует int . Возможно, у меня неправильный синтаксис, исправьте, если это так. В частности, если нужно, чтобы первый аргумент шаблона в классе C совпадал с T , а остальные - с пакетом параметров шаблона Args , это шаблон класс C правильный синтаксис?

Это дает ошибку

In function 'int main()':
post.cc:18: error: no matching function for call to 'foo()'

Это похоже на вопрос Вариативные шаблоны шаблонов и идеальная пересылка .Этот вопрос предполагает, что это ошибка gcc, но, возможно, я ошибаюсь, полагая, что эти вопросы касаются одного и того же.

Пожалуйста, будьте осторожны. Мои знания о вариативных шаблонах менее 12 часов; Я просто пытался переписать старый код на C ++, чтобы уменьшить дублирование. Кроме того, я давно не занимался C ++. Если есть обходной путь, дайте мне знать. Спасибо.

РЕДАКТИРОВАТЬ: обходной путь, предложенный в комментариях к шаблонам шаблонов Variadic и идеальной пересылке по Исэ Глицинии , работал у меня, что говорит о том, что это та же ошибка. Конечно я сейчас (а) интересно, насколько хрупок этот обходной путь; (б) почему он работает, и что побудило Исэ подумать об этом. Хотя я думаю, что только Исэ может ответить на последний вопрос. : -)

10
задан Community 23 May 2017 в 12:02
поделиться