Como você está static_assert os valores em um pacote de parâmetros de um modelo variável?

Estou criando um modelo variável.
Digamos que eu tenho algo parecido com isto:

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

    // ...
}

Instâncias desta classe podem ser instanciadas como:

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

Eu gostaria de ter certeza em tempo de compilação usando umstatic_assert que onumbers O pacote de parâmetros contém apenas números específicos. Para o bem deste exemplo, digamos que eu só quero permitir0 ou1.

Então, eu gostaria de fazer algo como:

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

Mas obviamentestatic_assert não funciona com umfor ciclo. Tenho certeza de que deve haver algum tipo de sintaxe para isso, mas não consegui descobrir.

Prefiro usar algo que seja compilado com um compilador C ++ 11 (ou talvez um compilador C ++ 14, se não for possível em C ++ 11).

questionAnswers(6)

yourAnswerToTheQuestion