Modelo Variadic C ++ AND e OR
Você pode usar os modelos variadic do C ++ 11 para concluir/* ??? */
em:
template<bool...v> struct var_and { static bool constexpr value = /* ??? */; };
de modo avar_and<v...>::value
fornece&&
sobre o pacote booleanov
em tempo de compilação?
Você pode fazer o mesmo parastruct var_or<v...>
para||
?
Você pode usar avaliação de curto-circuito (em ambos os casos)?
Editar: Uma atualização paraa resposta aceita adicionou que C ++ 17dobrar expressões habilitar
template<bool... v> constexpr bool var_and = (v && ...);
template<bool... v> constexpr bool var_or = (v || ...);
Parece que, para abordagens baseadas em pacotes de parâmetros, apenas um tipo restrito de "avaliação de curto-circuito" é possível: enquanto instanciandovar_or<true,foo(),bar()>
somente chamadas||
uma vez, também chama ambosfoo
ebar
.