, но в целом я согласен, что это вызовет больше проблем, чем решит.

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

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

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

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

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

Если я попытаюсь позвонить (например)make<std::pair>(1, 2) Я просто получаю

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

Я где-то здесь неправильно понял синтаксис?
Или это правильно, а GCC не так?
Или это просто принципиально невозможно в C ++ 0x?

[редактировать]

ПредложениеN2555 кажется, предполагает, что это разрешено иGCC утверждает, что внедрил его в GCC4.4.

Ответы на вопрос(3)

Ваш ответ на вопрос