Plantillas de plantilla variable y reenvío perfecto

Esta pregunt sobre el patrón generador de objetos me hizo pensar en formas de automatizarlo.

sencialmente, quiero automatizar la creación de funciones comostd::make_pair, std::bind1st ystd::mem_fun para que en lugar de tener que escribir una función diferente para cada tipo de clase de plantilla, pueda escribir una única función de plantilla de plantilla variable que maneje todos los casos a la vez. El uso de esta función sería como:

make<std::pair>(1, 2);         // equivalent to std::make_pair(1, 2)
make<std::binder2nd>(&foo, 3); // equivalent to std::bind2nd(&foo, 3);

¿Es posible escribir esta funciónmake? He intentado esto, pero no funciona en GCC 4.5 o 4.6:

template <template <typename...> class TemplateClass, typename... Args>
TemplateClass<Args...> make(Args&&... args)
{
    return TemplateClass<Args...>(std::forward<Args>(args)...);
}

Si trato de llamar (por ejemplo)make<std::pair>(1, 2) Acabo de recibir

error: no matching function for call to 'make(int, int)'

¿Tengo la sintaxis incorrecta en alguna parte aquí?
¿O es correcto y GCC está equivocado?
O es esto fundamentalmente imposible en C ++ 0x?

[editar

Propuesta N2555 parece sugerir que esto está permitido yGCC afirma haberlo implementado en GCC4.4.

Respuestas a la pregunta(3)

Su respuesta a la pregunta