¿Cómo se insertan los valores estáticos en un paquete de parámetros de una plantilla variadic?

Estoy creando una plantilla variadic.
Digamos que tengo algo como esto:

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

    // ...
}

Las instancias de esta clase se pueden instanciar como:

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

Me gustaría asegurarme en tiempo de compilación usando unstatic_assert que elnumbers El paquete de parámetros solo contiene números específicos. Por el bien de este ejemplo, digamos que solo quiero permitir0 o1.

Entonces me gustaría hacer algo como:

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

Pero obviamentestatic_assert no funciona con unfor lazo. Estoy bastante seguro de que debe haber algún tipo de sintaxis para esto, pero no he podido resolverlo.

Prefiero usar algo que se compile con un compilador C ++ 11 (o tal vez un compilador C ++ 14, si no es factible en C ++ 11).

Respuestas a la pregunta(6)

Su respuesta a la pregunta