Wie können Sie die Werte in einem Parameterpaket einer variadischen Vorlage static_assert?

Ich erstelle eine variable Vorlage.
Sagen wir, ich habe so etwas:

template<typename T, T ... Numbers>
class Sequence final {

    // Unpack parameter pack into a constexpr array
    constexpr static T count = sizeof...(Numbers);        
    constexpr static T numbers[count] = { Numbers... };

    // ...
}

Instanzen dieser Klasse können wie folgt instanziiert werden:

Sequence<uint32_t, 1, 2, 3, 42, 25> seq;

Ich möchte sicherstellen, dass bei der Kompilierung ein @ verwendet wirstatic_assert dass dienumbersas @ -Parameterpaket enthält nur bestimmte Zahlen. Nehmen wir für dieses Beispiel an, ich möchte nur @ zulasse0 oder1.

So würde ich gerne etwas machen wie:

for (size_t i = 0; i < count; i++) {
    static_assert(numbers[i] == 1 || numbers[i] == 0, "Only ones and zeroes are allowed.");
}

Aber offensichtlich,static_assert funktioniert nicht mit einemfor loop. Ich bin mir ziemlich sicher, dass es eine Art Syntax dafür geben muss, aber ich konnte es nicht herausfinden.

Ich würde lieber etwas verwenden, das mit einem C ++ 11-Compiler kompiliert wird (oder vielleicht mit einem C ++ 14-Compiler, wenn dies in C ++ 11 nicht möglich ist).

Antworten auf die Frage(12)

Ihre Antwort auf die Frage