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).