There's no good way in ISO C or C++ to express what the GNU ,##__VA_ARGS__ extension does prior to the addition of __VA_OPT__. However, code targeting new compilers (that doesn't want to use GNU C / GNU C++) cannot reliably use __VA_OPT__ instead of the comma paste extension, because GCC's -pedantic-errors mode rejects it outside C++20. Such rejection is unnecessary: __VA_OPT__ is a reserved identifier in other language modes, so there is no conformance reason to issue a diagnostic on its use. I think it'd be useful for GCC to unconditionally allow using __VA_OPT__ in all language modes. (I'm changing Clang to do the same.)
That sounds reasonable.
Here is anotehr good reason: https://stackoverflow.com/questions/48045470/portably-detect-va-opt-support/48045656 People can detect the presence of __VA_OPT__ support. Currently, the detection code would cause warnings when -std is set to something like "c++17" (though luckily not "gnu++17").
Linking the related MSVC issue /Zc:preprocessor __VA_OPT__ is not enabled with /std:c++17 https://developercommunity.visualstudio.com/t/Zc:preprocessor-__VA_OPT__-is-not-enabl