aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>2015-06-07 20:45:57 +0000
committerfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>2015-06-07 20:45:57 +0000
commite20e61b24db563ddffe4ed584208ec3e277d1f2b (patch)
treea3f26344042af4a988ffe424b16a9caa1041743a
parent15551864fc2c829906923127a546fce87a01b5ba (diff)
2015-06-07 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_tree.h (_Rb_tree<>::__is_transparent<>): Move to outer scope and rename to ... (std::__hash_is_transparent<>): ... this. * include/debug/stl_map.h (map::find<>, map::lower_bound<>, map::upper_bound<>, map::equal_range<>): New member function templates to perform heterogeneous lookup. * include/debug/stl_multimap.h (multimap::find<>, multimap::lower_bound<>, multimap::upper_bound<>, multimap::equal_range<>): Likewise. * include/debug/stl_multiset.h (multiset::find<>, multiset::lower_bound<>, multiset::upper_bound<>, multiset::equal_range<>): Likewise. * include/debug/stl_set.h (set::find<>, set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise. * include/profile/stl_map.h (map::find<>, map::count<>, map::lower_bound<>, map::upper_bound<>, map::equal_range<>): Likewise. * include/profile/stl_multimap.h (multimap::find<>, multimap::count<>, multimap::lower_bound<>, multimap::upper_bound<>, multimap::equal_range<>): Likewise. * include/profile/stl_multiset.h (multiset::find<>, multiset::count<>, multiset::lower_bound<>, multiset::upper_bound<>, multiset::equal_range<>): Likewise. * include/profile/stl_set.h (set::find<>, set::count<>, set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise. * testsuite/23_containers/map/operations/1.cc: Check const variants. * testsuite/23_containers/multimap/operations/1.cc: Likewise. * testsuite/23_containers/multiset/operations/1.cc: Likewise. * testsuite/23_containers/set/operations/1.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224200 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libstdc++-v3/ChangeLog31
-rw-r--r--libstdc++-v3/include/bits/stl_tree.h45
-rw-r--r--libstdc++-v3/include/debug/map.h78
-rw-r--r--libstdc++-v3/include/debug/multimap.h78
-rw-r--r--libstdc++-v3/include/debug/multiset.h70
-rw-r--r--libstdc++-v3/include/debug/set.h76
-rw-r--r--libstdc++-v3/include/profile/map.h114
-rw-r--r--libstdc++-v3/include/profile/multimap.h114
-rw-r--r--libstdc++-v3/include/profile/multiset.h106
-rw-r--r--libstdc++-v3/include/profile/set.h106
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/operations/1.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc38
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/operations/1.cc36
14 files changed, 873 insertions, 87 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index fe8957637b5..3bdcdad2ab4 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,34 @@
+2015-06-07 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/stl_tree.h (_Rb_tree<>::__is_transparent<>): Move to
+ outer scope and rename to ...
+ (std::__hash_is_transparent<>): ... this.
+ * include/debug/stl_map.h (map::find<>,
+ map::lower_bound<>, map::upper_bound<>, map::equal_range<>): New
+ member function templates to perform heterogeneous lookup.
+ * include/debug/stl_multimap.h (multimap::find<>,
+ multimap::lower_bound<>, multimap::upper_bound<>,
+ multimap::equal_range<>): Likewise.
+ * include/debug/stl_multiset.h (multiset::find<>,
+ multiset::lower_bound<>, multiset::upper_bound<>,
+ multiset::equal_range<>): Likewise.
+ * include/debug/stl_set.h (set::find<>,
+ set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
+ * include/profile/stl_map.h (map::find<>, map::count<>,
+ map::lower_bound<>, map::upper_bound<>, map::equal_range<>): Likewise.
+ * include/profile/stl_multimap.h (multimap::find<>, multimap::count<>,
+ multimap::lower_bound<>, multimap::upper_bound<>,
+ multimap::equal_range<>): Likewise.
+ * include/profile/stl_multiset.h (multiset::find<>, multiset::count<>,
+ multiset::lower_bound<>, multiset::upper_bound<>,
+ multiset::equal_range<>): Likewise.
+ * include/profile/stl_set.h (set::find<>, set::count<>,
+ set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
+ * testsuite/23_containers/map/operations/1.cc: Check const variants.
+ * testsuite/23_containers/multimap/operations/1.cc: Likewise.
+ * testsuite/23_containers/multiset/operations/1.cc: Likewise.
+ * testsuite/23_containers/set/operations/1.cc: Likewise.
+
2015-06-05 Jonathan Wakely <jwakely@redhat.com>
* doc/xml/manual/status_cxx2017.xml: Update status tables.
diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
index 240f5228530..0ba15ab2b4b 100644
--- a/libstdc++-v3/include/bits/stl_tree.h
+++ b/libstdc++-v3/include/bits/stl_tree.h
@@ -341,6 +341,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
_Rb_tree_node_base& __header) throw ();
+#if __cplusplus > 201103L
+ template<typename _Cmp, typename _SfinaeType, typename = __void_t<>>
+ struct __has_is_transparent
+ { };
+
+ template<typename _Cmp, typename _SfinaeType>
+ struct __has_is_transparent<_Cmp, _SfinaeType,
+ __void_t<typename _Cmp::is_transparent>>
+ { typedef void type; };
+#endif
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc = allocator<_Val> >
@@ -1109,16 +1119,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
equal_range(const key_type& __k) const;
#if __cplusplus > 201103L
- template<typename _Cmp, typename _Kt, typename = __void_t<>>
- struct __is_transparent { };
-
- template<typename _Cmp, typename _Kt>
- struct
- __is_transparent<_Cmp, _Kt, __void_t<typename _Cmp::is_transparent>>
- { typedef void type; };
-
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_find_tr(const _Kt& __k)
{
@@ -1127,7 +1130,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_find_tr(const _Kt& __k) const
{
@@ -1138,7 +1142,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
size_type
_M_count_tr(const _Kt& __k) const
{
@@ -1147,7 +1152,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_lower_bound_tr(const _Kt& __k)
{
@@ -1156,7 +1162,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_lower_bound_tr(const _Kt& __k) const
{
@@ -1174,7 +1181,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_upper_bound_tr(const _Kt& __k)
{
@@ -1183,7 +1191,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_upper_bound_tr(const _Kt& __k) const
{
@@ -1201,7 +1210,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
pair<iterator, iterator>
_M_equal_range_tr(const _Kt& __k)
{
@@ -1211,7 +1221,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
- typename _Req = typename __is_transparent<_Compare, _Kt>::type>
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
pair<const_iterator, const_iterator>
_M_equal_range_tr(const _Kt& __k) const
{
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 53d8ecc6988..688fb99d499 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -412,28 +412,82 @@ namespace __debug
find(const key_type& __x)
{ return iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ { return { _Base::find(__x), this }; }
+#endif
+
const_iterator
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ { return { _Base::find(__x), this }; }
+#endif
+
using _Base::count;
iterator
lower_bound(const key_type& __x)
{ return iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
const_iterator
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
const_iterator
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -443,6 +497,18 @@ namespace __debug
iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@@ -452,6 +518,18 @@ namespace __debug
const_iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index 5c7f2a91e88..e2c806131f0 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -393,28 +393,82 @@ namespace __debug
find(const key_type& __x)
{ return iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ { return { _Base::find(__x), this }; }
+#endif
+
const_iterator
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ { return { _Base::find(__x), this }; }
+#endif
+
using _Base::count;
iterator
lower_bound(const key_type& __x)
{ return iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
const_iterator
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
const_iterator
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -424,6 +478,18 @@ namespace __debug
iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@@ -433,6 +499,18 @@ namespace __debug
const_iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index 8dec44e73ea..b4d738f4bec 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -386,6 +386,22 @@ namespace __debug
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ { return { _Base::find(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ { return { _Base::find(__x), this }; }
+#endif
+
using _Base::count;
iterator
@@ -398,6 +414,22 @@ namespace __debug
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ { return { _Base::lower_bound(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
@@ -408,6 +440,22 @@ namespace __debug
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ { return { _Base::upper_bound(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -428,6 +476,28 @@ namespace __debug
const_iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index 00d539fa261..c13ee811aaa 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -393,6 +393,22 @@ namespace __debug
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ { return { _Base::find(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ { return { _Base::find(__x), this }; }
+#endif
+
using _Base::count;
iterator
@@ -405,6 +421,22 @@ namespace __debug
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ { return { _Base::lower_bound(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ { return { _Base::lower_bound(__x), this }; }
+#endif
+
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
@@ -415,7 +447,23 @@ namespace __debug
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
- std::pair<iterator,iterator>
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ { return { _Base::upper_bound(__x), this }; }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ { return { _Base::upper_bound(__x), this }; }
+#endif
+
+ std::pair<iterator, iterator>
equal_range(const key_type& __x)
{
std::pair<_Base_iterator, _Base_iterator> __res =
@@ -426,15 +474,37 @@ namespace __debug
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 214. set::find() missing const overload
- std::pair<const_iterator,const_iterator>
+ std::pair<const_iterator, const_iterator>
equal_range(const key_type& __x) const
{
- std::pair<_Base_iterator, _Base_iterator> __res =
+ std::pair<_Base_const_iterator, _Base_const_iterator> __res =
_Base::equal_range(__x);
return std::make_pair(const_iterator(__res.first, this),
const_iterator(__res.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h
index 1549d3dbdf1..210b9b478c6 100644
--- a/libstdc++-v3/include/profile/map.h
+++ b/libstdc++-v3/include/profile/map.h
@@ -429,6 +429,18 @@ namespace __profile
return iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
const_iterator
find(const key_type& __x) const
{
@@ -436,6 +448,18 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
size_type
count(const key_type& __x) const
{
@@ -443,6 +467,18 @@ namespace __profile
return _Base::count(__x);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ size_type
+ count(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return _Base::count(__x);
+ }
+#endif
+
iterator
lower_bound(const key_type& __x)
{
@@ -451,6 +487,19 @@ namespace __profile
return iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
const_iterator
lower_bound(const key_type& __x) const
{
@@ -459,6 +508,19 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
iterator
upper_bound(const key_type& __x)
{
@@ -467,6 +529,19 @@ namespace __profile
return iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
const_iterator
upper_bound(const key_type& __x) const
{
@@ -475,6 +550,19 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -485,6 +573,19 @@ namespace __profile
iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@@ -495,6 +596,19 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h
index 2ed9fcb13ed..4ec77d79ac6 100644
--- a/libstdc++-v3/include/profile/multimap.h
+++ b/libstdc++-v3/include/profile/multimap.h
@@ -388,6 +388,18 @@ namespace __profile
return iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
const_iterator
find(const key_type& __x) const
{
@@ -395,6 +407,18 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
size_type
count(const key_type& __x) const
{
@@ -402,6 +426,18 @@ namespace __profile
return _Base::count(__x);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ size_type
+ count(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return _Base::count(__x);
+ }
+#endif
+
iterator
lower_bound(const key_type& __x)
{
@@ -410,6 +446,19 @@ namespace __profile
return iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
const_iterator
lower_bound(const key_type& __x) const
{
@@ -418,6 +467,19 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
iterator
upper_bound(const key_type& __x)
{
@@ -426,6 +488,19 @@ namespace __profile
return iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
const_iterator
upper_bound(const key_type& __x) const
{
@@ -434,6 +509,19 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -444,6 +532,19 @@ namespace __profile
iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@@ -454,6 +555,19 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h
index f2d2f39253d..b304e5c5194 100644
--- a/libstdc++-v3/include/profile/multiset.h
+++ b/libstdc++-v3/include/profile/multiset.h
@@ -379,6 +379,18 @@ namespace __profile
return _Base::count(__x);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ size_type
+ count(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return _Base::count(__x);
+ }
+#endif
+
// multiset operations:
iterator
find(const key_type& __x)
@@ -396,6 +408,28 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
iterator
lower_bound(const key_type& __x)
{
@@ -413,6 +447,30 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
iterator
upper_bound(const key_type& __x)
{
@@ -431,6 +489,30 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@@ -453,6 +535,30 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h
index a05d10b7f30..3717fde5261 100644
--- a/libstdc++-v3/include/profile/set.h
+++ b/libstdc++-v3/include/profile/set.h
@@ -369,6 +369,18 @@ namespace __profile
return _Base::count(__x);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ size_type
+ count(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return _Base::count(__x);
+ }
+#endif
+
// set operations:
iterator
find(const key_type& __x)
@@ -384,6 +396,28 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ find(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ find(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ return { _Base::find(__x), this };
+ }
+#endif
+
iterator
lower_bound(const key_type& __x)
{
@@ -400,6 +434,30 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ lower_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ lower_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::lower_bound(__x), this };
+ }
+#endif
+
iterator
upper_bound(const key_type& __x)
{
@@ -416,6 +474,30 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ iterator
+ upper_bound(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ const_iterator
+ upper_bound(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ __profcxx_map2umap_invalidate(this->_M_map2umap_info);
+ return { _Base::upper_bound(__x), this };
+ }
+#endif
+
std::pair<iterator, iterator>
equal_range(const key_type& __x)
{
@@ -436,6 +518,30 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
+#if __cplusplus > 201103L
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<iterator, iterator>
+ equal_range(const _Kt& __x)
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+
+ template<typename _Kt,
+ typename _Req =
+ typename __has_is_transparent<_Compare, _Kt>::type>
+ std::pair<const_iterator, const_iterator>
+ equal_range(const _Kt& __x) const
+ {
+ __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
+ auto __res = _Base::equal_range(__x);
+ return { { __res.first, this }, { __res.second, this } };
+ }
+#endif
+
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }
diff --git a/libstdc++-v3/testsuite/23_containers/map/operations/1.cc b/libstdc++-v3/testsuite/23_containers/map/operations/1.cc
index 3a1c6e3bb04..76647f5aa32 100644
--- a/libstdc++-v3/testsuite/23_containers/map/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/operations/1.cc
@@ -29,6 +29,7 @@ void test01()
map<int, int> m0;
typedef map<int, int>::iterator iterator;
+ typedef map<int, int>::const_iterator const_iterator;
typedef pair<iterator, bool> insert_return_type;
pair<iterator, iterator> pp0;
typedef map<int, int>::value_type value_type;
@@ -47,7 +48,7 @@ void test01()
VERIFY( *pp0.first == value_type(2, 2) );
VERIFY( *pp0.second == value_type(3, 3) );
VERIFY( pp0.first == irt1.first );
- VERIFY( --pp0.first == irt0.first );
+ VERIFY( --pp0.first == irt0.first );
VERIFY( pp0.second == irt2.first );
m0.insert(value_type(3, 4));
@@ -59,7 +60,7 @@ void test01()
VERIFY( *pp0.first == value_type(3, 3) );
VERIFY( *pp0.second == value_type(4, 6) );
VERIFY( pp0.first == irt2.first );
- VERIFY( --pp0.first == irt1.first );
+ VERIFY( --pp0.first == irt1.first );
VERIFY( pp0.second == irt4.first );
insert_return_type irt5 = m0.insert(value_type(0, 7));
@@ -72,7 +73,7 @@ void test01()
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == irt0.first );
- VERIFY( --pp0.first == irt5.first );
+ VERIFY( --pp0.first == irt5.first );
VERIFY( pp0.second == irt1.first );
insert_return_type irt6 = m0.insert(value_type(5, 11));
@@ -83,7 +84,7 @@ void test01()
VERIFY( m0.count(5) == 1 );
VERIFY( *pp0.first == value_type(5, 11) );
VERIFY( pp0.first == irt6.first );
- VERIFY( --pp0.first == irt4.first );
+ VERIFY( --pp0.first == irt4.first );
VERIFY( pp0.second == m0.end() );
m0.insert(value_type(4, 14));
@@ -91,11 +92,11 @@ void test01()
m0.insert(value_type(4, 16));
pp0 = m0.equal_range(4);
- VERIFY( m0.count(4) == 1 );
+ VERIFY( m0.count(4) == 1 );
VERIFY( *pp0.first == value_type(4, 6) );
- VERIFY( *pp0.second == value_type(5, 11) );
+ VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( pp0.first == irt4.first );
- VERIFY( --pp0.first == irt3.first );
+ VERIFY( --pp0.first == irt3.first );
VERIFY( pp0.second == irt6.first );
m0.insert(value_type(0, 17));
@@ -103,20 +104,21 @@ void test01()
m0.insert(value_type(1, 19));
pp0 = m0.equal_range(0);
- VERIFY( m0.count(0) == 1 );
+ VERIFY( m0.count(0) == 1 );
VERIFY( *pp0.first == value_type(0, 7) );
- VERIFY( *pp0.second == value_type(1, 1) );
+ VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( pp0.first == irt5.first );
VERIFY( pp0.first == m0.begin() );
VERIFY( pp0.second == irt0.first );
- pp0 = m0.equal_range(1);
- VERIFY( m0.count(1) == 1 );
- VERIFY( *pp0.first == value_type(1, 1) );
- VERIFY( *pp0.second == value_type(2, 2) );
- VERIFY( pp0.first == irt0.first );
- VERIFY( --pp0.first == irt7.first);
- VERIFY( pp0.second == irt1.first );
+ const map<int, int>& m1 = m0;
+ pair<const_iterator, const_iterator> pp1 = m1.equal_range(1);
+ VERIFY( m1.count(1) == 1 );
+ VERIFY( *pp1.first == value_type(1, 1) );
+ VERIFY( *pp1.second == value_type(2, 2) );
+ VERIFY( pp1.first == irt0.first );
+ VERIFY( --pp1.first == irt7.first);
+ VERIFY( pp1.second == irt1.first );
}
int
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc b/libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc
index 8edd3c95c63..683da160010 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc
@@ -29,6 +29,7 @@ void test01()
multimap<int, int> mm0;
typedef multimap<int, int>::iterator iterator;
+ typedef multimap<int, int>::const_iterator const_iterator;
pair<iterator, iterator> pp0;
typedef multimap<int, int>::value_type value_type;
@@ -46,7 +47,7 @@ void test01()
VERIFY( *pp0.first == value_type(2, 2) );
VERIFY( *pp0.second == value_type(3, 3) );
VERIFY( pp0.first == iter1 );
- VERIFY( --pp0.first == iter0 );
+ VERIFY( --pp0.first == iter0 );
VERIFY( pp0.second == iter2 );
mm0.insert(value_type(3, 4));
@@ -58,7 +59,7 @@ void test01()
VERIFY( *pp0.first == value_type(3, 3) );
VERIFY( *pp0.second == value_type(4, 6) );
VERIFY( pp0.first == iter2 );
- VERIFY( --pp0.first == iter1 );
+ VERIFY( --pp0.first == iter1 );
VERIFY( pp0.second == iter4 );
iterator iter5 = mm0.insert(value_type(0, 7));
@@ -71,7 +72,7 @@ void test01()
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == iter0 );
- VERIFY( --pp0.first == iter5 );
+ VERIFY( --pp0.first == iter5 );
VERIFY( pp0.second == iter1 );
iterator iter6 = mm0.insert(value_type(5, 11));
@@ -82,7 +83,7 @@ void test01()
VERIFY( mm0.count(5) == 3 );
VERIFY( *pp0.first == value_type(5, 11) );
VERIFY( pp0.first == iter6 );
- VERIFY( --pp0.first == iter4 );
+ VERIFY( --pp0.first == iter4 );
VERIFY( pp0.second == mm0.end() );
mm0.insert(value_type(4, 14));
@@ -90,11 +91,11 @@ void test01()
mm0.insert(value_type(4, 16));
pp0 = mm0.equal_range(4);
- VERIFY( mm0.count(4) == 4 );
+ VERIFY( mm0.count(4) == 4 );
VERIFY( *pp0.first == value_type(4, 6) );
- VERIFY( *pp0.second == value_type(5, 11) );
+ VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( pp0.first == iter4 );
- VERIFY( --pp0.first == iter3 );
+ VERIFY( --pp0.first == iter3 );
VERIFY( pp0.second == iter6 );
mm0.insert(value_type(0, 17));
@@ -102,20 +103,21 @@ void test01()
mm0.insert(value_type(1, 19));
pp0 = mm0.equal_range(0);
- VERIFY( mm0.count(0) == 3 );
+ VERIFY( mm0.count(0) == 3 );
VERIFY( *pp0.first == value_type(0, 7) );
- VERIFY( *pp0.second == value_type(1, 1) );
+ VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( pp0.first == iter5 );
VERIFY( pp0.first == mm0.begin() );
VERIFY( pp0.second == iter0 );
- pp0 = mm0.equal_range(1);
- VERIFY( mm0.count(1) == 5 );
- VERIFY( *pp0.first == value_type(1, 1) );
- VERIFY( *pp0.second == value_type(2, 2) );
- VERIFY( pp0.first == iter0 );
- VERIFY( --pp0.first == iter7 );
- VERIFY( pp0.second == iter1 );
+ const multimap<int, int>& mm1 = mm0;
+ pair<const_iterator, const_iterator> pp1 = mm1.equal_range(1);
+ VERIFY( mm1.count(1) == 5 );
+ VERIFY( *pp1.first == value_type(1, 1) );
+ VERIFY( *pp1.second == value_type(2, 2) );
+ VERIFY( pp1.first == iter0 );
+ VERIFY( --pp1.first == iter7 );
+ VERIFY( pp1.second == iter1 );
}
int
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc b/libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc
index 8fbca8b7824..88881164f1d 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc
@@ -29,6 +29,7 @@ void test01()
multiset<int> ms0;
typedef multiset<int>::iterator iterator;
+ typedef multiset<int>::const_iterator const_iterator;
pair<iterator, iterator> pp0;
pp0 = ms0.equal_range(1);
@@ -45,19 +46,19 @@ void test01()
VERIFY( *pp0.first == 2 );
VERIFY( *pp0.second == 3 );
VERIFY( pp0.first == iter1 );
- VERIFY( --pp0.first == iter0 );
+ VERIFY( --pp0.first == iter0 );
VERIFY( pp0.second == iter2 );
ms0.insert(3);
iterator iter3 = ms0.insert(3);
iterator iter4 = ms0.insert(4);
-
+
pp0 = ms0.equal_range(3);
VERIFY( ms0.count(3) == 3 );
VERIFY( *pp0.first == 3 );
VERIFY( *pp0.second == 4 );
VERIFY( pp0.first == iter2 );
- VERIFY( --pp0.first == iter1 );
+ VERIFY( --pp0.first == iter1 );
VERIFY( pp0.second == iter4 );
iterator iter5 = ms0.insert(0);
@@ -70,7 +71,7 @@ void test01()
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == iter0 );
- VERIFY( --pp0.first == iter5 );
+ VERIFY( --pp0.first == iter5 );
VERIFY( pp0.second == iter1 );
iterator iter6 = ms0.insert(5);
@@ -81,7 +82,7 @@ void test01()
VERIFY( ms0.count(5) == 3 );
VERIFY( *pp0.first == 5 );
VERIFY( pp0.first == iter6 );
- VERIFY( --pp0.first == iter4 );
+ VERIFY( --pp0.first == iter4 );
VERIFY( pp0.second == ms0.end() );
ms0.insert(4);
@@ -89,32 +90,33 @@ void test01()
ms0.insert(4);
pp0 = ms0.equal_range(4);
- VERIFY( ms0.count(4) == 4 );
+ VERIFY( ms0.count(4) == 4 );
VERIFY( *pp0.first == 4 );
- VERIFY( *pp0.second == 5 );
+ VERIFY( *pp0.second == 5 );
VERIFY( pp0.first == iter4 );
- VERIFY( --pp0.first == iter3 );
+ VERIFY( --pp0.first == iter3 );
VERIFY( pp0.second == iter6 );
-
+
ms0.insert(0);
iterator iter7 = ms0.insert(0);
ms0.insert(1);
pp0 = ms0.equal_range(0);
- VERIFY( ms0.count(0) == 3 );
+ VERIFY( ms0.count(0) == 3 );
VERIFY( *pp0.first == 0 );
- VERIFY( *pp0.second == 1 );
+ VERIFY( *pp0.second == 1 );
VERIFY( pp0.first == iter5 );
VERIFY( pp0.first == ms0.begin() );
VERIFY( pp0.second == iter0 );
- pp0 = ms0.equal_range(1);
- VERIFY( ms0.count(1) == 5 );
- VERIFY( *pp0.first == 1 );
- VERIFY( *pp0.second == 2 );
- VERIFY( pp0.first == iter0 );
- VERIFY( --pp0.first == iter7 );
- VERIFY( pp0.second == iter1 );
+ const multiset<int>& ms1 = ms0;
+ pair<const_iterator, const_iterator> pp1 = ms1.equal_range(1);
+ VERIFY( ms1.count(1) == 5 );
+ VERIFY( *pp1.first == 1 );
+ VERIFY( *pp1.second == 2 );
+ VERIFY( pp1.first == iter0 );
+ VERIFY( --pp1.first == iter7 );
+ VERIFY( pp1.second == iter1 );
}
int
diff --git a/libstdc++-v3/testsuite/23_containers/set/operations/1.cc b/libstdc++-v3/testsuite/23_containers/set/operations/1.cc
index 6712b79bff4..e648a8b3a66 100644
--- a/libstdc++-v3/testsuite/23_containers/set/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/operations/1.cc
@@ -29,6 +29,7 @@ void test01()
set<int> s0;
typedef set<int>::iterator iterator;
+ typedef set<int>::const_iterator const_iterator;
typedef pair<iterator, bool> insert_return_type;
pair<iterator, iterator> pp0;
@@ -52,13 +53,13 @@ void test01()
s0.insert(3);
insert_return_type irt3 = s0.insert(3);
insert_return_type irt4 = s0.insert(4);
-
+
pp0 = s0.equal_range(3);
VERIFY( s0.count(3) == 1 );
VERIFY( *pp0.first == 3 );
VERIFY( *pp0.second == 4 );
VERIFY( pp0.first == irt2.first );
- VERIFY( --pp0.first == irt1.first );
+ VERIFY( --pp0.first == irt1.first );
VERIFY( pp0.second == irt4.first );
insert_return_type irt5 = s0.insert(0);
@@ -71,7 +72,7 @@ void test01()
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == irt0.first );
- VERIFY( --pp0.first == irt5.first );
+ VERIFY( --pp0.first == irt5.first );
VERIFY( pp0.second == irt1.first );
insert_return_type irt6 = s0.insert(5);
@@ -82,7 +83,7 @@ void test01()
VERIFY( s0.count(5) == 1 );
VERIFY( *pp0.first == 5 );
VERIFY( pp0.first == irt6.first );
- VERIFY( --pp0.first == irt4.first );
+ VERIFY( --pp0.first == irt4.first );
VERIFY( pp0.second == s0.end() );
s0.insert(4);
@@ -90,32 +91,33 @@ void test01()
s0.insert(4);
pp0 = s0.equal_range(4);
- VERIFY( s0.count(4) == 1 );
+ VERIFY( s0.count(4) == 1 );
VERIFY( *pp0.first == 4 );
- VERIFY( *pp0.second == 5 );
+ VERIFY( *pp0.second == 5 );
VERIFY( pp0.first == irt4.first );
- VERIFY( --pp0.first == irt3.first );
+ VERIFY( --pp0.first == irt3.first );
VERIFY( pp0.second == irt6.first );
-
+
s0.insert(0);
insert_return_type irt7 = s0.insert(0);
s0.insert(1);
pp0 = s0.equal_range(0);
- VERIFY( s0.count(0) == 1 );
+ VERIFY( s0.count(0) == 1 );
VERIFY( *pp0.first == 0 );
- VERIFY( *pp0.second == 1 );
+ VERIFY( *pp0.second == 1 );
VERIFY( pp0.first == irt5.first );
VERIFY( pp0.first == s0.begin() );
VERIFY( pp0.second == irt0.first );
- pp0 = s0.equal_range(1);
- VERIFY( s0.count(1) == 1 );
- VERIFY( *pp0.first == 1 );
- VERIFY( *pp0.second == 2 );
- VERIFY( pp0.first == irt0.first );
- VERIFY( --pp0.first == irt7.first );
- VERIFY( pp0.second == irt1.first );
+ const set<int>& s1 = s0;
+ pair<const_iterator, const_iterator> pp1 = s1.equal_range(1);
+ VERIFY( s1.count(1) == 1 );
+ VERIFY( *pp1.first == 1 );
+ VERIFY( *pp1.second == 2 );
+ VERIFY( pp1.first == irt0.first );
+ VERIFY( --pp1.first == irt7.first );
+ VERIFY( pp1.second == irt1.first );
}
int