parcialmente citando el FDIS, §14.5.3:
Un parámetro paquete plantilla es un parámetro de plantilla que acepta cero o más argumentos de plantilla.
Un parámetro paquete función es un parámetro función que acepta cero o más argumentos de la función.
Un paquete parámetro es o bien un paquete de parámetro de plantilla o un paquete de parámetro de función.
Una expansión paquete consiste en un modelo y una elipsis, la instanciación de que produce cero o más instancias del patrón en una lista.
Así que en tu ejemplo,
typename... Args
es un paquete de parámetros plantilla (y por consiguiente también un paquete parámetro)
Args... params
es un paquete de parámetros función (y por consiguiente también un paquete de parámetros )
sizeof...(Args)
es un paquete de expansión donde Args
es el patrón (un identificador en este contexto).
Y también, 'typename ... Args' es un * paquete de parámetros de plantilla *, pero no es una * expansión de paquete *. En 'plantilla clase A {plantilla clase C {}; plantilla clase ... E> clase F {}; }; ', el' B' es un * paquete de parámetros de plantilla *. El 'Args ... B' es su declaración que también es una * expansión del paquete * del patrón' Args B', expandiéndose a una * template-parameter-list *. 'plantilla clase ... E' también es una expansión de paquete de patrón' plantilla clase E'. –
@ JohannesSchaub-litb ¿podría publicar este comentario como respuesta? Ciertamente es lo suficientemente detallado. – Motti
¿Puedes explicar tu cuarto punto, es decir, el patrón, me refiero a cómo funciona ese patrón? y en qué parte de C++ funciona :) –