https://gcc.gnu.org/g:01476b39bd0caa9d4a227a2158d724a97658e7ed
commit r13-9236-g01476b39bd0caa9d4a227a2158d724a97658e7ed Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Nov 8 13:58:23 2024 +0000 libstdc++: Do not define _Insert_base::try_emplace before C++17 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. (cherry picked from commit b66a57c0ad300b293ebd366bc29f44f2ddb65c69) Diff: --- 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 --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index 2528dbe21091..f40fa9ed0424 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -941,6 +941,7 @@ namespace __detail return __h._M_insert(__hint, __v, __node_gen, __unique_keys{}); } +#if __cplusplus >= 201703L && _GLIBCXX_HOSTED template<typename _KType, typename... _Args> std::pair<iterator, bool> try_emplace(const_iterator, _KType&& __k, _Args&&... __args) @@ -962,6 +963,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 17c300eca2f3..9ac0ae44854a 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -344,7 +344,7 @@ namespace __debug } -#if __cplusplus > 201402L +#if __cplusplus >= 201703L && _GLIBCXX_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 4c6f26b6bfa3..e9013ee75bb9 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -440,7 +440,7 @@ namespace __debug _M_check_rehashed(__bucket_count); } -#if __cplusplus > 201402L +#if __cplusplus >= 201703L && _GLIBCXX_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 864bc20f146d..1a02525e0bdc 100644 --- a/libstdc++-v3/testsuite/17_intro/names.cc +++ b/libstdc++-v3/testsuite/17_intro/names.cc @@ -136,6 +136,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.