On Tuesday, January 13, 2026, Thiago Macieira wrote:
Then:
if (auto x = SomeFunction) return !x;
I'm assuming you meant SomeFunction().
SomeFunction could return an Lvalue, a PRvalue, or an Xvalue, for example:
mutex SomeFunction(void);
mutex &SomeFunction(void);
mutex &&SomeFunction(void);
This is why we need:
decltype(SomeFunction) x = SomeFunction();
if ( x ) return !x;
And so the problem is that you need to type out the expression twice, give the variable a non-clashing name, and mention the variable's name twice as well.
Much easier to mention the function only once and to not mention the variable at all.