C++ Logo


Advanced search

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

From: Thomas Köppe <tkoeppe_at_[hidden]>
Date: Mon, 25 Jan 2021 23:20:51 +0000
The proposed solution seems elegant to me. If you say that's implementable,
I'd be in favour of that.

I have very regrettably not sent an updated paper to WG14 for this feature,
it's one of the things on my list. I shall prioritize getting it done!

On Mon, 25 Jan 2021 at 23:02, Richard Smith <richardsmith_at_[hidden]> wrote:

> [+WG14 liaison list]
> On Mon, Jan 25, 2021 at 2:59 PM Richard Smith <richardsmith_at_[hidden]>
> wrote:
>> 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:21:05