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

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

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

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

int main(void)
{
  map<string, int> a = foo<string, map, int>();
}

Итак, идея здесь в том, чтоT Спичкиstring, C Спичкиmapи пакет параметров шаблонаArgs Спичкиint, Возможно, у меня неправильный синтаксис, исправьте, если так. В частности, если кто-то хочет первый аргумент шаблона вclass C соответствоватьT а остальные, чтобы соответствовать пакету параметров шаблонаArgs, являетсяtemplate <typename T, typename... Args> class C правильный синтаксис?

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

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

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

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

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

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

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