Initialisierung von std::array als Basisklasse



  • Hallo Leute,

    Ich baue mir gerade eine vector-Klasse. Diese erbt privat von std::array. Diese Klasse hat einen Konstruktor, der dieses std::array initialisieren soll. Folgendes funktioniert:

    template <typename... Args>
    	vector_base(Args&&... args)
    		: array_type{{ args... }}
    	{}
    

    Aber ohne doppelte {} tut es das nicht. Warum? Ich dachte hier greift brace ellision.

    Gruesse,
    Der Kellerautomat



  • Kellerautomat schrieb:

    Hallo Leute,

    Ich baue mir gerade eine vector-Klasse. Diese erbt privat von std::array. Diese Klasse hat einen Konstruktor, der dieses std::array initialisieren soll. Folgendes funktioniert:

    template <typename... Args>
    	vector_base(Args&&... args)
    		: array_type{{ args... }}
    	{}
    

    Aber ohne doppelte {} tut es das nicht. Warum? Ich dachte hier greift brace ellision.

    So viel ich weiß, tut es das nicht. Hier:
    8.5.1/11

    11 In a declaration of the form
    T x = { a };
    braces can be elided in an initializer-list as follows.105 [...]
    105) Braces cannot be elided in other uses of list-initialization.

    Dein Fall fällt unter other uses .


Anmelden zum Antworten