std :: initializer_list en tant que constructeur std :: array

J’ai besoin de passer des arguments à une classe wrapper qui ressemble à un exemple minimal comme ceci:

template class Wrapper : Stack { std::array m_oStacks; template Wrapper(std::initializer_list const& size, Args&&... args) : Stack(args), m_oStacks{5,2,3,4,5,6,7,8,9,10} //, m_oStacks(size) //,m_oStacks{size} //,m_oStacks{{size}} { //m_oStacks = { size }; } }; 

J’ai essayé d’initier le tableau avec la taille initializer_list mais rien ne fonctionne (parties commentées du source), seule la constante {5,2,3,4,5,6,7,8,9,10} fait

Quelqu’un sait la raison et une solution?

Cordialement Matyro

Edit 1: Le problème principal est que TStack (dans la plupart des cas) n’a pas de constructeur par défaut. Je dois donc initialiser le tableau à la construction.

Avec std::initializer_list :

 template  class Wrapper { public: Wrapper(std::initializer_list il) : Wrapper(il, std::make_index_sequence{}) { } private: template  Wrapper(std::initializer_list il, std::index_sequence) : m_oStacks{{ *(il.begin() + Is)... }} { } std::array m_oStacks; }; 

DEMO

Avec std::array :

 template  class Wrapper { public: Wrapper(const std::array& a) : Wrapper(a, std::make_index_sequence{}) { } private: template  Wrapper(const std::array& a, std::index_sequence) : m_oStacks{{ a[Is]... }} { } std::array m_oStacks; }; 

DEMO 2