Avoid ambiguity between C++2a std::erase_if and LFTS version
authorJonathan Wakely <jwakely@redhat.com>
Tue, 29 Jan 2019 00:47:38 +0000 (00:47 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 29 Jan 2019 00:47:38 +0000 (00:47 +0000)
These calls should have been qualified to avoid ADL anyway, but in C++2a
it becomes essential to qualify the calls in experimental::erase because
std::erase_if is also declared and the calls become ambiguous.

* include/experimental/forward_list (experimental::erase): Qualify
call to erase_if.
* include/experimental/list (experimental::erase): Likewise.
* include/std/forward_list (std::erase): Likewise.
* include/std/list (std::erase): Likewise.

From-SVN: r268356

libstdc++-v3/ChangeLog
libstdc++-v3/include/experimental/forward_list
libstdc++-v3/include/experimental/list
libstdc++-v3/include/std/forward_list
libstdc++-v3/include/std/list

index fc6f7d1..7af725a 100644 (file)
@@ -1,5 +1,11 @@
 2019-01-29  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/experimental/forward_list (experimental::erase): Qualify
+       call to erase_if.
+       * include/experimental/list (experimental::erase): Likewise.
+       * include/std/forward_list (std::erase): Likewise.
+       * include/std/list (std::erase): Likewise.
+
        * testsuite/20_util/reference_wrapper/result_type.cc: Disable for
        C++2a.
        * testsuite/20_util/reference_wrapper/typedefs-2.cc: Likewise.
index 60f0564..f6ffbf0 100644 (file)
@@ -54,7 +54,9 @@ inline namespace fundamentals_v2
     erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
     {
       using __elem_type = typename forward_list<_Tp, _Alloc>::value_type;
-      erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; });
+      std::experimental::erase_if(__cont, [&](__elem_type& __elem) {
+         return __elem == __value;
+      });
     }
 
   namespace pmr {
index 13c33f0..2b7a331 100644 (file)
@@ -54,7 +54,9 @@ inline namespace fundamentals_v2
     erase(list<_Tp, _Alloc>& __cont, const _Up& __value)
     {
       using __elem_type = typename list<_Tp, _Alloc>::value_type;
-      erase_if(__cont, [&](__elem_type& __elem) { return __elem == __value; });
+      experimental::erase_if(__cont, [&](__elem_type& __elem) {
+         return __elem == __value;
+      });
     }
 
 namespace pmr {
index 3d3b6d4..9d6cc40 100644 (file)
@@ -78,8 +78,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
     {
       using __elem_type = typename forward_list<_Tp, _Alloc>::value_type;
-      return erase_if(__cont,
-                     [&](__elem_type& __elem) { return __elem == __value; });
+      return std::erase_if(__cont, [&](__elem_type& __elem) {
+         return __elem == __value;
+      });
     }
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std
index 7b02e86..8d6ac19 100644 (file)
@@ -102,8 +102,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     erase(list<_Tp, _Alloc>& __cont, const _Up& __value)
     {
       using __elem_type = typename list<_Tp, _Alloc>::value_type;
-      return erase_if(__cont,
-                     [&](__elem_type& __elem) { return __elem == __value; });
+      return std::erase_if(__cont, [&](__elem_type& __elem) {
+         return __elem == __value;
+      });
     }
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std