+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.
_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> >
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)
{
}
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
{
}
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
{
}
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)
{
}
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
{
}
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)
{
}
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
{
}
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)
{
}
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
{
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)
{
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
{
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; }
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)
{
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
{
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; }
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
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); }
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)
{
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; }
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
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); }
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 =
// _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; }
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
{
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
{
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)
{
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
{
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)
{
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
{
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)
{
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
{
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; }
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
{
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
{
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)
{
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
{
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)
{
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
{
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)
{
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
{
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; }
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)
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)
{
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)
{
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)
{
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; }
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)
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)
{
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)
{
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)
{
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; }
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;
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));
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));
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));
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));
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));
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
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;
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));
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));
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));
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));
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));
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
multiset<int> ms0;
typedef multiset<int>::iterator iterator;
+ typedef multiset<int>::const_iterator const_iterator;
pair<iterator, iterator> pp0;
pp0 = ms0.equal_range(1);
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);
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);
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);
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
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;
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);
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);
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);
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