[PATCH] libstdc++: Fix __cpp_impl_reflection comparisons
Jakub Jelinek
jakub@redhat.com
Thu Jan 15 07:03:15 GMT 2026
Hi!
Last night when applying Marek's patchset for testing I've noticed I forgot
to change these 5 spots when changing the -freflection -std=c++26 predefined
value from 202500 which meant we implement some reflection, but not the
whole paper, to 202506 which is the https://eel.is/c++draft/tab:cpp.predefined.ft
value for it.
Bootstrapped/regtested on x86_64-linux and i686-linux on top of Marek's
v3 patchset, ok for trunk after that patch is committed?
2026-01-15 Jakub Jelinek <jakub@redhat.com>
* include/std/type_traits (std::is_reflection, std::is_fundamental,
std::is_reflection_v, std::is_consteval_only): Compare
__cpp_impl_reflection >= 202506L instead of 202500L.
* testsuite/20_util/variable_templates_for_traits.cc: Likewise.
--- libstdc++-v3/include/std/type_traits.jj 2026-01-14 21:26:19.456842913 +0100
+++ libstdc++-v3/include/std/type_traits 2026-01-14 22:00:46.524039884 +0100
@@ -749,7 +749,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: public false_type { };
#endif
-#if __cpp_impl_reflection >= 202500L // C++ >= 26
+#if __cpp_impl_reflection >= 202506L // C++ >= 26
/// is_reflection
template<typename _Tp>
struct is_reflection
@@ -838,7 +838,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct is_fundamental
: public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
is_null_pointer<_Tp>
-#if __cpp_impl_reflection >= 202500L
+#if __cpp_impl_reflection >= 202506L
, is_reflection<_Tp>
#endif
>::type
@@ -3555,7 +3555,7 @@ template <typename _Tp>
is_member_function_pointer<_Tp>::value;
#endif
-#if __cpp_impl_reflection >= 202500L // C++ >= 26
+#if __cpp_impl_reflection >= 202506L // C++ >= 26
template <typename _Tp>
inline constexpr bool is_reflection_v = false;
template <>
@@ -3900,7 +3900,7 @@ template<typename _Ret, typename _Fn, ty
# endif
#endif
-#if __cpp_impl_reflection >= 202500L \
+#if __cpp_impl_reflection >= 202506L \
&& _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_is_consteval_only) // C++ >= 26
/// is_consteval_only - true if the type is consteval-only.
/// @since C++26
--- libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc.jj 2026-01-14 21:26:19.459487116 +0100
+++ libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc 2026-01-14 22:01:06.877697256 +0100
@@ -331,7 +331,7 @@ static_assert(is_convertible_v<int&, con
static_assert(!is_convertible_v<const int&, int&>
&& !is_convertible<const int&, int&>::value, "");
-#if __cpp_impl_reflection >= 202500L
+#if __cpp_impl_reflection >= 202506L
static_assert(is_reflection_v<decltype(^^int)>
&& is_reflection<decltype(^^int)>::value, "");
static_assert(!is_reflection_v<int> && !is_reflection<int>::value, "");
Jakub
More information about the Libstdc++
mailing list