Но на самом деле главное в том, что вычисление аргумента функции предшествует телу функции, и проблема не в самом выражении сгиба.
#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)
будет хорошо во время выполнения, но следующие два случая - нет.
Как сделатьоценка короткого замыкания также доступно вfold expressions
?