Hi!

Reflection currently doesn't work with -D_GLIBCXX_USE_CXX11_ABI=0.
The problem is that std::meta::exception currently uses under the
hood std::string and std::u8string and those aren't constexpr in
the old ABI.
While those members are in the standard exposition-only and so
we could make it to work by writing a custom class template that
just remembers const char{,8_t} * and size_t, there shouldn't be
many people trying to mix ABI incompatible even with C++11 together
with C++26.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2026-01-20  Jakub Jelinek  <[email protected]>

        * include/bits/version.def (reflection): Add cxx11abi = yes;.
        * include/bits/version.h: Regenerate.

--- libstdc++-v3/include/bits/version.def.jj    2026-01-15 16:33:47.022097704 
+0100
+++ libstdc++-v3/include/bits/version.def       2026-01-19 17:28:16.214806742 
+0100
@@ -2259,6 +2259,7 @@ ftms = {
     v = 202506;
     cxxmin = 26;
     extra_cond = "__cpp_impl_reflection >= 202506L";
+    cxx11abi = yes;
   };
 };
 
--- libstdc++-v3/include/bits/version.h.jj      2026-01-15 16:33:47.022097704 
+0100
+++ libstdc++-v3/include/bits/version.h 2026-01-19 17:28:22.844417523 +0100
@@ -2526,6 +2526,16 @@
 #endif /* !defined(__cpp_lib_philox_engine) */
 #undef __glibcxx_want_philox_engine
 
+#if !defined(__cpp_lib_reflection)
+# if (__cplusplus >  202302L) && _GLIBCXX_USE_CXX11_ABI && 
(__cpp_impl_reflection >= 202506L)
+#  define __glibcxx_reflection 202506L
+#  if defined(__glibcxx_want_all) || defined(__glibcxx_want_reflection)
+#   define __cpp_lib_reflection 202506L
+#  endif
+# endif
+#endif /* !defined(__cpp_lib_reflection) */
+#undef __glibcxx_want_reflection
+
 #if !defined(__cpp_lib_is_implicit_lifetime)
 # if (__cplusplus >= 202100L) && 
(__has_builtin(__builtin_is_implicit_lifetime))
 #  define __glibcxx_is_implicit_lifetime 202302L
@@ -2536,14 +2546,4 @@
 #endif /* !defined(__cpp_lib_is_implicit_lifetime) */
 #undef __glibcxx_want_is_implicit_lifetime
 
-#if !defined(__cpp_lib_reflection)
-# if (__cplusplus >  202302L) && (__cpp_impl_reflection >= 202506L)
-#  define __glibcxx_reflection 202506L
-#  if defined(__glibcxx_want_all) || defined(__glibcxx_want_reflection)
-#   define __cpp_lib_reflection 202506L
-#  endif
-# endif
-#endif /* !defined(__cpp_lib_reflection) */
-#undef __glibcxx_want_reflection
-
 #undef __glibcxx_want_all

        Jakub

Reply via email to