Как вы static_assert значения в пакете параметров шаблона Variadic?

Я создаю шаблон Variadic.
Допустим, у меня есть что-то вроде этого:

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

    // ...
}

Экземпляры этого класса могут быть созданы как:

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

Я хотел бы убедиться во время компиляции, используяstatic_assert чтоnumbers Пакет параметров содержит только конкретные номера. Ради этого примера, скажем, я хочу только разрешить0 или же1.

Поэтому я хотел бы сделать что-то вроде:

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

Но очевидно,static_assert не работает сfor петля. Я почти уверен, что для этого должен быть какой-то синтаксис, но я не смог понять это.

Я бы предпочел использовать что-то, что компилируется с помощью компилятора C ++ 11 (или, возможно, компилятора C ++ 14, если это невозможно в C ++ 11).

Ответы на вопрос(6)

Ваш ответ на вопрос