Вариативные шаблоны шаблонов и идеальная пересылка

Этот вопрос в шаблоне генератора объектов заставил меня задуматься о способах автоматизации.

По сути, я хочу автоматизировать создание таких функций, как std :: make_pair , std :: bind1st и std :: mem_fun , чтобы вместо того, чтобы писать разные функции для каждого типа класса шаблона, вы могли написать одну функцию шаблона с вариативным шаблоном, которая обрабатывает все случаи сразу. Использование этой функции выглядит так:

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

Можно ли написать эту функцию make ? Я пробовал это, но это не работает в GCC 4.5 или 4.6:

template