From: Jonathan Wakely Date: Fri, 8 Nov 2024 13:58:23 +0000 (+0000) Subject: libstdc++: Do not define _Insert_base::try_emplace before C++17 X-Git-Tag: basepoints/gcc-16~4507 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b66a57c0ad300b293ebd366bc29f44f2ddb65c69;p=thirdparty%2Fgcc.git 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. --- diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index ecf50313d09c..b5f837e60619 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 std::pair 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 __l) diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index d0e398f0fd97..5323a2b0d950 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 pair 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 1acafd8facea..cc24fd0d8930 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 pair 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 5deb310dc313..1952028d2cf0 100644 --- a/libstdc++-v3/testsuite/17_intro/names.cc +++ b/libstdc++-v3/testsuite/17_intro/names.cc @@ -138,6 +138,8 @@ // defines to_chars_result::ptr and to_chars_result::ec #define ec ( #define ptr ( +// and define try_emplace +#define try_emplace ( #endif // These clash with newlib so don't use them.