arámetros de plantilla @Template y plantillas variadas con gcc 4.4

Estoy usando gcc 4.4 en Debian squeeze. Considere el siguiente código.

#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>();
}

Entonces, la idea aquí es queT partidosstring, C partidosmap, y el paquete de parámetros de plantillaArgs partidosint. Es posible que tenga una sintaxis incorrecta, corríjala si es así. En particular, si uno quiere el primer argumento de plantilla enclass C para que coincida conT y el resto para que coincida con el paquete de parámetros de plantillaArgs, estemplate <typename T, typename... Args> class C la sintaxis correcta?

Esto da el error

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

Esto parece ser similar a la pregunta Plantillas de plantilla variable y reenvío perfecto. Esa pregunta sugiere que este es un error de gcc, pero tal vez me equivoque al pensar que estas preguntas son sobre lo mismo.

Por favor se gentil. Mi conocimiento de plantillas variadas tiene menos de 12 horas; Solo estaba tratando de reescribir un código antiguo de C ++ para reducir la duplicación. También ha pasado un tiempo desde que hice cualquier C ++. Si hay una solución alternativa, hágamelo saber. Gracias

EDIT: la solución sugerida en los comentarios de Plantillas de plantilla variable y reenvío perfecto porIse Wisteria funcionó para mí, lo que sugiere que este es el mismo error. Por supuesto, ahora estoy (a) preguntándome cuán frágil es esta solución y (b) por qué funciona y qué motivó a Ise a pensar en ello. Aunque supongo que solo Ise puede responder la última parte. : -)

Respuestas a la pregunta(4)

Su respuesta a la pregunta