I realized recently that you can use the ternary operator in GCC and clang without a middle (?:
or ? :
works) and it will insert the first expression into the middle:
// outputs 2
cout << (2 ?: 4);
// outputs 3
cout << (0 ? : 3);
Where is this in the standard? I looked and didn't see anything about it.
It isn't in the standard at all.
What you are observing is a GCC extension: https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html
If you omit it, its value is taken from the first operand prior to contextual conversion to bool
.
The extensions value lies in not repeating side-effects and reducing the source-codes size.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With