On Mon, 13 Oct 2025 at 16:23, Tomasz Kaminski <[email protected]> wrote:
> I have noticed that clang defines language feature test macros when the > feature is supported > in eariel mode mode, here is example of __cpp_pack_indexing > https://godbolt.org/z/bzsdzWboM > I don't think they do that consistently for all features though. In some cases the macro means "can be used without getting a warning". > > > Could we simply do the same for __cpp_explicit_this_parameter, the selling > point of FTM was > to avoid having per-version checks. > > On Mon, Oct 13, 2025 at 5:09 PM Patrick Palka <[email protected]> wrote: > >> Series tested on x86_64-pc-linux-gnu, does this look OK for trunk only? >> >> -- >8 -- >> >> This FTM is like __cpp_explicit_this_parameter but is also defined >> in earlier C++ modes if deducing this is supported as an extension >> by the compiler. Currently only GCC supports this, Clang doesn't. >> >> libstdc++-v3/ChangeLog: >> >> * include/bits/c++config (_GLIBCXX_EXPLICIT_THIS_PARAMETER): >> New. >> --- >> libstdc++-v3/include/bits/c++config | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/libstdc++-v3/include/bits/c++config >> b/libstdc++-v3/include/bits/c++config >> index eec3a4a499dd..e6d8f186d0d4 100644 >> --- a/libstdc++-v3/include/bits/c++config >> +++ b/libstdc++-v3/include/bits/c++config >> @@ -927,6 +927,13 @@ namespace __gnu_cxx >> # define _GLIBCXX_USE_BUILTIN_TRAIT(BT) 0 >> #endif >> >> +// Whether deducing this is usable either officially, if in C++23 mode, >> or >> +// as an extension (Clang doesn't support the latter). >> +#if __cpp_explicit_this_parameter \ >> + || (__cplusplus >= 201103L && __GNUC__ >= 14 && >> !defined(_GLIBCXX_CLANG)) >> +# define _GLIBCXX_EXPLICIT_THIS_PARAMETER 202110L >> +#endif >> + >> // Mark code that should be ignored by the compiler, but seen by Doxygen. >> #define _GLIBCXX_DOXYGEN_ONLY(X) >> >> -- >> 2.51.0.491.g4b71b29477 >> >>
