diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2015-11-10 15:12:24 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2015-11-10 15:12:24 +0000 |
commit | d4a9dffbaaf1e53648ee102a93bdcb3edb2f137e (patch) | |
tree | b84f006d2d7debf0194132d55b158fdf3da30136 /libstdc++-v3 | |
parent | 60baa1883c96c6a06e933dc72ec041c0d03069b8 (diff) | |
download | gcc-d4a9dffbaaf1e53648ee102a93bdcb3edb2f137e.zip gcc-d4a9dffbaaf1e53648ee102a93bdcb3edb2f137e.tar.gz gcc-d4a9dffbaaf1e53648ee102a93bdcb3edb2f137e.tar.bz2 |
Fix return type of heterogeneous find for sets
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
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_multiset.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_set.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/map/operations/2.cc | 5 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc | 5 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc | 5 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/set/operations/2.cc | 5 |
7 files changed, 40 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 76d982a..5d41876a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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. diff --git a/libstdc++-v3/include/bits/stl_multiset.h b/libstdc++-v3/include/bits/stl_multiset.h index 5ccc6dd..e6e2337 100644 --- a/libstdc++-v3/include/bits/stl_multiset.h +++ b/libstdc++-v3/include/bits/stl_multiset.h @@ -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 //@} diff --git a/libstdc++-v3/include/bits/stl_set.h b/libstdc++-v3/include/bits/stl_set.h index cf74368..8bea61a 100644 --- a/libstdc++-v3/include/bits/stl_set.h +++ b/libstdc++-v3/include/bits/stl_set.h @@ -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 //@} diff --git a/libstdc++-v3/testsuite/23_containers/map/operations/2.cc b/libstdc++-v3/testsuite/23_containers/map/operations/2.cc index 6cc277a..ef301ef 100644 --- a/libstdc++-v3/testsuite/23_containers/map/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/map/operations/2.cc @@ -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 diff --git a/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc b/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc index 67c3bfd..eef6ee4 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc @@ -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 diff --git a/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc b/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc index ff2748f..4bea719 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc @@ -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 diff --git a/libstdc++-v3/testsuite/23_containers/set/operations/2.cc b/libstdc++-v3/testsuite/23_containers/set/operations/2.cc index 84ddd1f..6a68453 100644 --- a/libstdc++-v3/testsuite/23_containers/set/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/set/operations/2.cc @@ -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 |