Hi!

I've tried compiling
#include <bits/stdc++.h>
with -std=c++26 -fdump-lang-all
and
for i in `grep ^Class.std::[^_] *.C.001l.class | sed 's/^Class //;s/[< ].*$//' 
| sort -u | grep -v ::.*::`; do grep -q $i 
/usr/src/gcc/libstdc++-v3/src/c++23/std.cc.in || echo $i; done
This printed
std::auto_ptr
std::binary_function
std::owner_equal
std::owner_hash
std::unary_function
where auto_ptr, binary_function and unary_function have been removed in earlier
versions of C++ and owner_equal and owner_hash are missing.

The following patch adds them.

Wonder how to automatically discover other missing exports (like in PR121373
std::byteswap), maybe one could dig that stuff somehow from the raw
dump (look for identifiers in std namespace (and perhaps inlined namespaces
thereof at least) which don't start with underscore.

Anyway, ok for trunk?

2025-08-02  Jakub Jelinek  <ja...@redhat.com>

        * src/c++23/std.cc.in (std::owner_equal, std::owner_hash): Export.

--- libstdc++-v3/src/c++23/std.cc.in.jj 2025-07-27 17:19:23.683127026 +0200
+++ libstdc++-v3/src/c++23/std.cc.in    2025-08-02 20:50:48.301748803 +0200
@@ -1982,6 +1982,10 @@ export namespace std
   using std::polymorphic;
   namespace pmr { using std::pmr::polymorphic; }
 #endif
+#if __cpp_lib_smart_ptr_owner_equality
+  using std::owner_equal;
+  using std::owner_hash;
+#endif
 }
 
 // 20.4 <memory_resource>

        Jakub

Reply via email to