[PATCH] assert: Support assert as variadic macro for C++26 [PR27276]
Jonathan Wakely
jwakely@redhat.com
Thu Feb 5 15:48:37 GMT 2026
On Thu, 5 Feb 2026 at 15:40, Tomasz Kaminski <tkaminsk@redhat.com> wrote:
>
>
>
> On Thu, Feb 5, 2026 at 4:36 PM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * Tomasz Kamiński:
>>
>> > +# if __ASSERT_VARIADIC
>> > +# define assert(...) \
>> > + ((__VA_ARGS__) \
>> > + ? (void)(1 ? 1 : bool(__VA_ARGS__)) \
>> > + : __assert_fail (#__VA_ARGS__, __ASSERT_FILE, __ASSERT_LINE, \
>> > + __ASSERT_FUNCTION))
>>
>> Doesn't this evaluate __VA_ARGS__ multiple times?
>
> I got the same question initially when I saw this solution, but
> the second bool(__VA_ARGS) is in the false branch of the ternary:
> 1 ? 1 : bool(__VA_ARGS__)
> So it is never evaluated.
Right, it's never evaluated, it's only there to enforce that
__VA_ARGS__ expands to a single expression, because bool(x,y) is
ill-formed.
More information about the Libc-alpha
mailing list