В С++ 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
является невариантной функцией шаблона, принимающей только один параметр шаблона и один аргумент. Каковы правила синтаксиса для этого (примерно)? Как это можно обобщить?
Также: в реализации функции эллипсис (...
) находится в конце интересующего выражения. Есть ли причина, по которой в списке аргументов шаблона и списке параметров эллипсис находится посередине?