¿Especificando un tipo para todos los argumentos pasados a la función variable o la función de plantilla variable sin matriz, vector, estructuras, etc.?

Estoy creando una función (posiblemente una función miembro, no es que importe ... ¿tal vez sí?) Que necesita aceptar un número desconocido de argumentos, pero quiero que todos sean del mismo tipo. Sé que podría pasar una matriz o vector, pero quiero poder aceptar la lista de argumentos directamente sin estructura adicional o incluso corchetes adicionales. No parece que las funciones variadas en sí mismas sean seguras, y no estaba seguro de cómo hacerlo con las funciones de plantilla variadic. Esto es esencialmente lo que estoy buscando (lo más probable es que no sea el código correcto, y totalmente no con el propósito de obtener listas de dragones, jajaja):

//typedef for dragon_list_t up here somewhere.

enum Maiden {
    Eunice
    , Beatrice
    , Una_Brow
    , Helga
    , Aida
};

dragon_list_t make_dragon_list(Maiden...) {
    //here be dragons
}

O

template<Maiden... Maidens> dragon_list_t make_dragon_list(Maidens...) {
    //here be dragons
}

USO

dragon_list_t dragons_to_slay
    = make_dragon_list(Maiden.Eunice, Maiden.Helga, Maiden.Aida)
;

Intenté algunas cosas similares a las anteriores, sin dados. Sugerencias? ¿Obstáculos obvios que puedo haber hecho? Sé que puede no ser un gran problema hacer esto en su lugar:

dragon_list_t make_dragon_list(std::array<Maiden> maidens) {
    //here be dragons.
}
dragon_list_t dragons_to_slay
    = make_dragon_list({Maiden.Eunice, Maiden.Helga, Maiden.Aida})
;

pero preferiría poder hacerlo de la primera manera si es posible.

Respuestas a la pregunta(9)

Su respuesta a la pregunta