C++11 の可変個引数テンプレートを使用して、以下を完成させることはできますか/* ??? */
?
template<bool...v> struct var_and { static bool constexpr value = /* ??? */; };
コンパイル時にブール値パックをvar_and<v...>::value
提供しますか?&&
v
struct var_or<v...>
に対しても同じことができます||
か?
短絡評価(両方とも)は使えますか?
編集:受け入れられた回答への更新により、 C ++ 17の折りたたみ式が有効になることが追加されました
template<bool... v> constexpr bool var_and = (v && ...);
template<bool... v> constexpr bool var_or = (v || ...);
パラメータパックベースのアプローチでは、制限されたタイプの「短絡評価」のみが可能であるようです:var_or<true,foo(),bar()>
呼び出しを 1 回だけインスタンス化しながら、と||
の両方も呼び出します。foo
bar