Modelos de modelos variados e encaminhamento perfeito

Essa questã no padrão gerador de objetos me fez pensar em maneiras de automatizá-l

Essencialmente, eu quero automatizar a criação de funções comostd::make_pair, std::bind1st estd::mem_fun para que, em vez de precisar escrever uma função diferente para cada tipo de classe de modelo, você possa escrever uma única função de modelo variável que lide com todos os casos de uma só vez. O uso dessa função seria como:

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

É possível escrever esta funçãomake? Eu tentei isso, mas não funciona no GCC 4.5 ou 4.6:

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

Se eu tentar ligar (por exemplo)make<std::pair>(1, 2) Acabei de receber

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

Eu tenho a sintaxe errada em algum lugar aqu
Or isso está certo e o GCC está errado?
Or isso é fundamentalmente impossível em C ++ 0

[editar

Proposal N2555 parece sugerir que isso é permitido e @GCC afirma ter implementado o GCC4.4.

questionAnswers(3)

yourAnswerToTheQuestion