Como disponibilizar a `avaliação de curto-circuito` em` expressões de dobra`?
#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!
}
O tradicional&&
operador suportaavaliação de curto-circuito, tãofalse && (*pb = true)
ficará bem em tempo de execução, mas os dois casos a seguir não.
Como fazeravaliação de curto-circuito também disponível emfold expressions
?