diff mbox series

[committed] libstdc++: Do not define _Insert_base::try_emplace before C++17

Message ID 20241108144132.796586-1-jwakely@redhat.com
State New
Headers show
Series [committed] libstdc++: Do not define _Insert_base::try_emplace before C++17 | expand

Commit Message

Jonathan Wakely Nov. 8, 2024, 2:41 p.m. UTC
This is not a reserved name in C++11 and C++14, so must not be defined.

Also use the appropriate feature test macros for the try_emplace members
of the Debug Mode maps.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Insert_base::try_emplace):
	Do not define for C++11 and C++14.
	* include/debug/map.h (try_emplace): Use feature test macro.
	* include/debug/unordered_map (try_emplace): Likewise.
	* testsuite/17_intro/names.cc: Define try_emplace before C++17.
---
Tested x86_64-linux. Pushed to trunk. This needs to be backported too.

 libstdc++-v3/include/bits/hashtable_policy.h | 2 ++
 libstdc++-v3/include/debug/map.h             | 2 +-
 libstdc++-v3/include/debug/unordered_map     | 2 +-
 libstdc++-v3/testsuite/17_intro/names.cc     | 2 ++
 4 files changed, 6 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index ecf50313d09..b5f837e6061 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -1008,6 +1008,7 @@  namespace __detail
 	return __h._M_insert(__hint, __v, __node_gen, __unique_keys{});
       }
 
+#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
       template<typename _KType, typename... _Args>
 	std::pair<iterator, bool>
 	try_emplace(const_iterator, _KType&& __k, _Args&&... __args)
@@ -1029,6 +1030,7 @@  namespace __detail
 	  __node._M_node = nullptr;
 	  return { __it, true };
 	}
+#endif
 
       void
       insert(initializer_list<value_type> __l)
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index d0e398f0fd9..5323a2b0d95 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -344,7 +344,7 @@  namespace __debug
 	}
 
 
-#if __cplusplus > 201402L
+#ifdef __glibcxx_map_try_emplace // C++ >= 17 && HOSTED
       template <typename... _Args>
         pair<iterator, bool>
         try_emplace(const key_type& __k, _Args&&... __args)
diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map
index 1acafd8face..cc24fd0d893 100644
--- a/libstdc++-v3/include/debug/unordered_map
+++ b/libstdc++-v3/include/debug/unordered_map
@@ -442,7 +442,7 @@  namespace __debug
 	  _M_check_rehashed(__bucket_count);
 	}
 
-#if __cplusplus > 201402L
+#ifdef __glibcxx_unordered_map_try_emplace // C++ >= 17 && HOSTED
       template <typename... _Args>
 	pair<iterator, bool>
 	try_emplace(const key_type& __k, _Args&&... __args)
diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc
index 5deb310dc31..1952028d2cf 100644
--- a/libstdc++-v3/testsuite/17_intro/names.cc
+++ b/libstdc++-v3/testsuite/17_intro/names.cc
@@ -138,6 +138,8 @@ 
 // <charconv> defines to_chars_result::ptr and to_chars_result::ec
 #define ec (
 #define ptr (
+// <map> and <unordered_map> define try_emplace
+#define try_emplace (
 #endif
 
 // These clash with newlib so don't use them.