]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix return type of heterogeneous find for sets
authorJonathan Wakely <jwakely@redhat.com>
Tue, 10 Nov 2015 15:12:24 +0000 (15:12 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 10 Nov 2015 15:12:24 +0000 (15:12 +0000)
PR libstdc++/68190
* include/bits/stl_multiset.h (multiset::find): Fix return types.
* include/bits/stl_set.h (set::find): Likewise.
* testsuite/23_containers/map/operations/2.cc: Test find return types.
* testsuite/23_containers/multimap/operations/2.cc: Likewise.
* testsuite/23_containers/multiset/operations/2.cc: Likewise.
* testsuite/23_containers/set/operations/2.cc: Likewise.

From-SVN: r230113

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_multiset.h
libstdc++-v3/include/bits/stl_set.h
libstdc++-v3/testsuite/23_containers/map/operations/2.cc
libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc
libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc
libstdc++-v3/testsuite/23_containers/set/operations/2.cc

index 76d982aa8f0539df8e3f3ea2c9d01fef27065fed..5d41876ac57903a9b514e0d2c9edcf6e07d3a0bc 100644 (file)
@@ -1,5 +1,13 @@
 2015-11-10  Jonathan Wakely  <jwakely@redhat.com>
 
+       PR libstdc++/68190
+       * include/bits/stl_multiset.h (multiset::find): Fix return types.
+       * include/bits/stl_set.h (set::find): Likewise.
+       * testsuite/23_containers/map/operations/2.cc: Test find return types.
+       * testsuite/23_containers/multimap/operations/2.cc: Likewise.
+       * testsuite/23_containers/multiset/operations/2.cc: Likewise.
+       * testsuite/23_containers/set/operations/2.cc: Likewise.
+
        * doc/xml/manual/status_cxx2017.xml: Update.
        * doc/html/*: Regenerate.
 
index 5ccc6dd61f72fd2cd4e8bb7dcfc4d640716a733c..e6e233772b320f49d066acfa62e69663939593b2 100644 (file)
@@ -680,13 +680,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 #if __cplusplus > 201103L
       template<typename _Kt>
        auto
-       find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
-       { return _M_t._M_find_tr(__x); }
+       find(const _Kt& __x)
+       -> decltype(iterator{_M_t._M_find_tr(__x)})
+       { return iterator{_M_t._M_find_tr(__x)}; }
 
       template<typename _Kt>
        auto
-       find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
-       { return _M_t._M_find_tr(__x); }
+       find(const _Kt& __x) const
+       -> decltype(const_iterator{_M_t._M_find_tr(__x)})
+       { return const_iterator{_M_t._M_find_tr(__x)}; }
 #endif
       //@}
 
index cf74368fa0e145e6a51bd81b0b7ec40e38e9f10b..8bea61a3b23f37bdd49dd015b9f2d3ccd4457c93 100644 (file)
@@ -699,13 +699,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 #if __cplusplus > 201103L
       template<typename _Kt>
        auto
-       find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
-       { return _M_t._M_find_tr(__x); }
+       find(const _Kt& __x)
+       -> decltype(iterator{_M_t._M_find_tr(__x)})
+       { return iterator{_M_t._M_find_tr(__x)}; }
 
       template<typename _Kt>
        auto
-       find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
-       { return _M_t._M_find_tr(__x); }
+       find(const _Kt& __x) const
+       -> decltype(const_iterator{_M_t._M_find_tr(__x)})
+       { return const_iterator{_M_t._M_find_tr(__x)}; }
 #endif
       //@}
 
index 6cc277aedceffa758891b2d8c794ede03eb920eb..ef301ef136c303b77ad210f17bc77ad89381b881 100644 (file)
@@ -54,6 +54,11 @@ test01()
   VERIFY( cit == cx.end() );
 
   VERIFY( Cmp::count == 0);
+
+  static_assert(std::is_same<decltype(it), test_type::iterator>::value,
+      "find returns iterator");
+  static_assert(std::is_same<decltype(cit), test_type::const_iterator>::value,
+      "const find returns const_iterator");
 }
 
 void
index 67c3bfd60a38fea91f2cf90cb2bf63190ef63110..eef6ee4515d706e3ed47305d73660e12132944e0 100644 (file)
@@ -54,6 +54,11 @@ test01()
   VERIFY( cit == cx.end() );
 
   VERIFY( Cmp::count == 0);
+
+  static_assert(std::is_same<decltype(it), test_type::iterator>::value,
+      "find returns iterator");
+  static_assert(std::is_same<decltype(cit), test_type::const_iterator>::value,
+      "const find returns const_iterator");
 }
 
 void
index ff2748f713a0ba8bafcbb7a04e080e24be5969bb..4bea719160f4315cd1eca6f20a19aef7232d0771 100644 (file)
@@ -54,6 +54,11 @@ test01()
   VERIFY( cit == cx.end() );
 
   VERIFY( Cmp::count == 0);
+
+  static_assert(std::is_same<decltype(it), test_type::iterator>::value,
+      "find returns iterator");
+  static_assert(std::is_same<decltype(cit), test_type::const_iterator>::value,
+      "const find returns const_iterator");
 }
 
 void
index 84ddd1f1ddcecb90b73c5d1aa722db20cbda9e4f..6a68453ec7bfca303b069c4c68372f5f31fba013 100644 (file)
@@ -54,6 +54,11 @@ test01()
   VERIFY( cit == cx.end() );
 
   VERIFY( Cmp::count == 0);
+
+  static_assert(std::is_same<decltype(it), test_type::iterator>::value,
+      "find returns iterator");
+  static_assert(std::is_same<decltype(cit), test_type::const_iterator>::value,
+      "const find returns const_iterator");
 }
 
 void