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