]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: fix C++17 regression in concept __heterogeneous_key (2nd)
authorNathan Myers <ncm@cantrip.org>
Fri, 6 Feb 2026 08:56:42 +0000 (03:56 -0500)
committerNathan Myers <ncm@cantrip.org>
Fri, 6 Feb 2026 10:41:28 +0000 (05:41 -0500)
The commit 3f7905550483408a2c4c5096a1adc8d7e863eb12 defined a
concept __heterogeneous_key using a name not defined in C++17.
This is fixed by guarding the definition behind a name defined
in C++23 the earliest Standard that uses the definition.

https://gcc.gnu.org/pipermail/gcc-patches/2026-February/707814.html

libstdc++-v3/ChangeLog
* include/bits/stl_function.h (concept __heterogeneous_key):
Guard with __glibcxx_associative_heterogeneous_erasure

libstdc++-v3/include/bits/stl_function.h

index 657f40bca2eed442284facd3de05ae24dc39fb70..1312564216bdc240846a1f9ffefbe3c667c32e8c 100644 (file)
@@ -1525,7 +1525,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 #endif
 
-#ifdef __cpp_concepts
+#ifdef __glibcxx_associative_heterogeneous_erasure
 template <typename _Kt, typename _Container>
   concept __not_container_iterator =
     (!is_convertible_v<_Kt&&, typename _Container::iterator> &&
@@ -1533,8 +1533,7 @@ template <typename _Kt, typename _Container>
 
 template <typename _Kt, typename _Container>
   concept __heterogeneous_key =
-    (!is_same_v<typename _Container::key_type,
-               typename remove_cvref<_Kt>::type>) &&
+    (!is_same_v<typename _Container::key_type, remove_cvref_t<_Kt>>) &&
     __not_container_iterator<_Kt, _Container>;
 #endif