Параметры шаблонов шаблонов и шаблоны с переменными параметрами с помощью 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 и идеальная пересылка поИсе Вистерия работал для меня, что говорит о том, что это тот же баг. Конечно, мне сейчас (а) интересно, насколько хрупок этот обходной путь и (б) почему он работает, и что побудило Исе подумать об этом. Хотя, думаю, только Исе может ответить на последний вопрос. :-)