В С++ 11 есть такие вариативные шаблоны, как этот:
template< class T, class... Args >
unique_ptr<T> make_unique( Args&&... args )
{
return unique_ptr<T>(new T(std::forward<Args>(args)...));
}
В этом есть некоторые интересные факты: выражение std::forward<Args>(args)... использует как Args, так и Args, но только один токен .... Кроме того, std::forward является невариантной функцией шаблона, принимающей только один параметр шаблона и один аргумент. Каковы правила синтаксиса для этого (примерно)? Как это можно обобщить?
Также: в реализации функции эллипсис (...) находится в конце интересующего выражения. Есть ли причина, по которой в списке аргументов шаблона и списке параметров эллипсис находится посередине?