C++ Logo


Advanced search

Re: [wg14/wg21 liaison] Feature test macro for P0306 (__VA_OPT__)

From: Richard Smith <richardsmith_at_[hidden]>
Date: Mon, 25 Jan 2021 15:02:28 -0800
[+WG14 liaison list]

On Mon, Jan 25, 2021 at 2:59 PM Richard Smith <richardsmith_at_[hidden]>

> Hi,
> SD-FeatureTest doesn't mention P0306. I think a feature test macro would
> be useful here, to allow projects to incrementally adopt the new
> functionality. Example:
> #if __cpp_va_opt
> #define FOO(a, ...) f(a __VA_OPT__(,) __VA_ARGS__)
> #elif __GNUC__
> #define FOO(a, ...) f(a , ## __VA_ARGS__)
> #else
> // Hopefully we get the MSVC implicit comma deletion behavior.
> #define FOO(a, ...) f(a , __VA_ARGS__)
> #endif
> Note that the __GNUC__ extension is enabled by default, even in conforming
> modes, in GCC, Clang, and ICC. However, after the adoption of P0306, it's
> no longer a conforming extension, so presumably it will be phased out at
> some point, and uses of the feature-test macro, such as in the above
> example, are going to become necessary.
> Regarding the name of the macro: this functionality is shared with C, and
> as such, a __cpp_* name is probably not ideal. However, there's another
> interesting option: we could use
> #ifdef __VA_OPT__
> ...
> as the feature test mechanism. This doesn't appear to conflict with
> anything else, and is in line with our feature test mechanism for
> __has_cpp_attribute and __has_include.
> So that's my suggestion: #ifdef/#ifndef/defined should treat `__VA_OPT__`
> as if it were the name of a defined macro.
> Thoughts?
> Richard

Received on 2021-01-25 17:02:41