Especificando um tipo para todos os argumentos passados para a função variadica ou função de modelo variadica sem / usando matriz, vetor, estruturas, etc

Estou criando uma função (possivelmente função membro, não que isso importe ... talvez seja?) Que precise aceitar um número desconhecido de argumentos, mas quero que todos eles sejam do mesmo tipo. Eu sei que poderia passar em uma matriz ou vetor, mas quero poder aceitar a lista de argumentos diretamente, sem estrutura ou colchetes extras. Não parece que as funções variadas sejam tipicamente seguras, e eu não tinha certeza de como proceder com essas funções de modelo variadas. Aqui está essencialmente o que estou buscando (mais do que provavelmente não código correto, e totalmente não com o objetivo de obter listas de dragões, risos):

//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
}

OU

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)
;

Já tentei algumas coisas semelhantes às anteriores, sem dados. Sugestões? Descuidos óbvios que eu possa ter feito? Eu sei que pode não ser muito importante fazer isso:

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})
;

mas prefiro poder fazê-lo da primeira maneira, se possível.

questionAnswers(9)

yourAnswerToTheQuestion