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.

questionAnswers(2)

yourAnswerToTheQuestion