+1

From: Liaison <[email protected]> On Behalf Of Thomas Köppe via 
Liaison
Sent: Monday, January 25, 2021 5:21 PM
To: Richard Smith <[email protected]>
Cc: Thomas Köppe <[email protected]>; [email protected]; 
[email protected]
Subject: [EXTERNAL] Re: [wg14/wg21 liaison] Feature test macro for P0306 
(__VA_OPT__)

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 
<[email protected]<mailto:[email protected]>> wrote:
[+WG14 liaison list]


On Mon, Jan 25, 2021 at 2:59 PM Richard Smith 
<[email protected]<mailto:[email protected]>> 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
-- 
SG10 mailing list
[email protected]
https://lists.isocpp.org/mailman/listinfo.cgi/sg10

Reply via email to