#include <type_traits>
#define FORWARD(arg)\
std::forward<decltype(arg)>(arg)
template<typename... Args>
constexpr bool AndL(Args&&... args)
{
return (... && FORWARD(args));
}
template<typename... Args>
constexpr bool AndR(Args&&... args)
{
return (FORWARD(args) && ...);
}
int main()
{
bool* pb = nullptr;
false && (*pb = true); // ok at runtime.
AndL(false, (*pb = true)); // error at runtime!
AndR(false, (*pb = true)); // error at runtime!
}
伝統的な&&
オペレータは、短絡評価をサポートしていますので、false && (*pb = true)
は、実行時にOKになりますが、以下の2つのケースではありません。「短絡評価」を `fold expressions`でも利用できるようにする方法は?
作成方法短絡評価もfold expressions
で利用できますか?
ここでの問題は、折り畳み式ではありません。 'constexpr bool AND(bool a、bool b){return a && b;}'と試してみてください。問題は、関数を呼び出す前にすべての引数を評価しなければならず、渡される*結果*です。 – Quentin
新しい 'pb'は決してありません。すべての' * pb = true'は未定義の動作です。 –
実行時評価の理由は '* pb = true'自体が' constexpr'ではないからです。 –