This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Support for __VA_OPT__ in gcc
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: Edward Diener <eldlistmailingz at tropicsoft dot com>
- Cc: gcc-help <gcc-help at gcc dot gnu dot org>
- Date: Mon, 30 Sep 2019 11:08:40 +0100
- Subject: Re: Support for __VA_OPT__ in gcc
- References: <qmmk1d$1st$1@blaine.gmane.org>
On Sat, 28 Sep 2019 at 04:29, Edward Diener wrote:
>
> Given this program:
>
> #define PP_THIRD_ARG(a,b,c,...) c
> #define VA_OPT_SUPPORTED_I(...) PP_THIRD_ARG(__VA_OPT__(,),1,0,)
> #define VA_OPT_SUPPORTED() VA_OPT_SUPPORTED_I(?)
>
> #include <iostream>
>
> int main()
> {
> int result = VA_OPT_SUPPORTED();
> std::cout << result;
> return 0;
> }
>
> as a test for __VA_OPT__ support in a C++ compiler ( taken from
> https://stackoverflow.com/questions/48045470/portably-detect-va-opt-support
> )
> I have discovered that __VA_OPT__ support started with gcc-8.1.
You could also consult
https://gcc.gnu.org/projects/cxx-status.html#cxx2a which notes that
the support is incomplete.
> However
> I have also discovered that the support occurs no matter what the C++
> standard level is used for the compilation and not just when the option
> is 'std=c++2a'. In other words I can compile the program with
> 'std=c++03', link and run the program and the program will output 1,
> showing __VA_OPT__ support, rather than 0, which shows that __VA_OPT__
> is not supported.
>
> If I compile the above with any version of gcc lower than gcc-8.1 the
> program will outpyt 0 no matter what -std mode I use.
>
> Is this intended, that the C++20 __VA_OPT__ support works in all modes
> for gcc-8.1 and higher ?
Yes, it's available as a GNU extension. You can get a diagnostic with
-std=c++14 -Wpedantic, but not with any -std=gnu++NN modes.