@john-0 sagte in Wie definiert man eine constexpr std::initializer_list?: @Columbo sagte in Wie definiert man eine constexpr std::initializer_list?: struct X { // garantiert, dass der assert einen Uebersetzungsfehler produziert consteval X(std::initializer_list<int> arr) { assert(arr.size() == 4); } }; int main() { X x{1, 2, 3}; // Fehler } ``` Das funktioniert gar nicht, da assert keinen konstanten Ausdruck zurückliefert,d .h. es schlägt immer fehl und nicht nur wenn die falsche Anzahl Objekte enthalten ist. Für consteval muss man static_assert verwenden, und das geht nicht, weil der Compiler ein temporäres Objekt erzeugt. D.h. zurzeit kann man keinen Konstruktor schreiben, der wirklich zum Übersetzungszeitpunkt eine initializer_list erhält und zum Übersetzungszeitpunkt daraus ein constexpr Objekt macht. Falsch. Keine Ahnung wie Du ueberhaupt darauf kommst, Du hast den Code offensichtlich nicht mal getestet (https://coliru.stacked-crooked.com/a/53c9a90bfbb4a423). Das hat in der Praxis schon immer funktioniert und seit C++17 garantiert, was consteval sowieso erfordert. Edit: Wahrscheinlich hast Du den static_assert in Deinem Code durch assert ersetzt, das Schlug fehl weil die Laenge der Liste 1 ist, aber du hast faelschlicherweise deduziert, dass es am fehlenden constexpr von __assert_fail liegt Guck mal hier: https://coliru.stacked-crooked.com/a/51003882390b9d36