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
