visibility-decoration.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@114658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant 2010-09-23 16:27:36 +00:00
parent aef07cbffd
commit 28c97e6ee1
2 changed files with 168 additions and 24 deletions

View File

@ -181,12 +181,14 @@ private:
protected: protected:
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage() {} __scoped_allocator_storage() {}
template <class _OuterA2, template <class _OuterA2,
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage(_OuterA2&& __outerAlloc, __scoped_allocator_storage(_OuterA2&& __outerAlloc,
const _InnerAllocs& ...__innerAllocs) const _InnerAllocs& ...__innerAllocs)
: outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)), : outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)),
@ -196,6 +198,7 @@ protected:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, const _OuterA2&>::value is_constructible<outer_allocator_type, const _OuterA2&>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage( __scoped_allocator_storage(
const __scoped_allocator_storage<_OuterA2, _InnerAllocs...>& __other) const __scoped_allocator_storage<_OuterA2, _InnerAllocs...>& __other)
: outer_allocator_type(__other.outer_allocator()), : outer_allocator_type(__other.outer_allocator()),
@ -205,6 +208,7 @@ protected:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage( __scoped_allocator_storage(
__scoped_allocator_storage<_OuterA2, _InnerAllocs...>&& __other) __scoped_allocator_storage<_OuterA2, _InnerAllocs...>&& __other)
: outer_allocator_type(_STD::move(__other.outer_allocator())), : outer_allocator_type(_STD::move(__other.outer_allocator())),
@ -214,22 +218,28 @@ protected:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
__scoped_allocator_storage(_OuterA2&& __o, _LIBCPP_INLINE_VISIBILITY
const inner_allocator_type& __i) __scoped_allocator_storage(_OuterA2&& __o,
: outer_allocator_type(_STD::forward<_OuterA2>(__o)), const inner_allocator_type& __i)
__inner_(__i) : outer_allocator_type(_STD::forward<_OuterA2>(__o)),
{ __inner_(__i)
} {
}
_LIBCPP_INLINE_VISIBILITY
inner_allocator_type& inner_allocator() {return __inner_;} inner_allocator_type& inner_allocator() {return __inner_;}
_LIBCPP_INLINE_VISIBILITY
const inner_allocator_type& inner_allocator() const {return __inner_;} const inner_allocator_type& inner_allocator() const {return __inner_;}
_LIBCPP_INLINE_VISIBILITY
outer_allocator_type& outer_allocator() outer_allocator_type& outer_allocator()
{return static_cast<outer_allocator_type&>(*this);} {return static_cast<outer_allocator_type&>(*this);}
_LIBCPP_INLINE_VISIBILITY
const outer_allocator_type& outer_allocator() const const outer_allocator_type& outer_allocator() const
{return static_cast<const outer_allocator_type&>(*this);} {return static_cast<const outer_allocator_type&>(*this);}
scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...> scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...>
_LIBCPP_INLINE_VISIBILITY
select_on_container_copy_construction() const select_on_container_copy_construction() const
{ {
return scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...> return scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...>
@ -252,12 +262,14 @@ class __scoped_allocator_storage<_OuterAlloc>
protected: protected:
typedef scoped_allocator_adaptor<_OuterAlloc> inner_allocator_type; typedef scoped_allocator_adaptor<_OuterAlloc> inner_allocator_type;
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage() {} __scoped_allocator_storage() {}
template <class _OuterA2, template <class _OuterA2,
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage(_OuterA2&& __outerAlloc) __scoped_allocator_storage(_OuterA2&& __outerAlloc)
: outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)) {} : outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)) {}
@ -265,6 +277,7 @@ protected:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, const _OuterA2&>::value is_constructible<outer_allocator_type, const _OuterA2&>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage( __scoped_allocator_storage(
const __scoped_allocator_storage<_OuterA2>& __other) const __scoped_allocator_storage<_OuterA2>& __other)
: outer_allocator_type(__other.outer_allocator()) {} : outer_allocator_type(__other.outer_allocator()) {}
@ -273,20 +286,26 @@ protected:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
__scoped_allocator_storage( __scoped_allocator_storage(
__scoped_allocator_storage<_OuterA2>&& __other) __scoped_allocator_storage<_OuterA2>&& __other)
: outer_allocator_type(_STD::move(__other.outer_allocator())) {} : outer_allocator_type(_STD::move(__other.outer_allocator())) {}
_LIBCPP_INLINE_VISIBILITY
inner_allocator_type& inner_allocator() inner_allocator_type& inner_allocator()
{return static_cast<inner_allocator_type&>(*this);} {return static_cast<inner_allocator_type&>(*this);}
_LIBCPP_INLINE_VISIBILITY
const inner_allocator_type& inner_allocator() const const inner_allocator_type& inner_allocator() const
{return static_cast<const inner_allocator_type&>(*this);} {return static_cast<const inner_allocator_type&>(*this);}
_LIBCPP_INLINE_VISIBILITY
outer_allocator_type& outer_allocator() outer_allocator_type& outer_allocator()
{return static_cast<outer_allocator_type&>(*this);} {return static_cast<outer_allocator_type&>(*this);}
_LIBCPP_INLINE_VISIBILITY
const outer_allocator_type& outer_allocator() const const outer_allocator_type& outer_allocator() const
{return static_cast<const outer_allocator_type&>(*this);} {return static_cast<const outer_allocator_type&>(*this);}
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor<outer_allocator_type> scoped_allocator_adaptor<outer_allocator_type>
select_on_container_copy_construction() const select_on_container_copy_construction() const
{return scoped_allocator_adaptor<outer_allocator_type>( {return scoped_allocator_adaptor<outer_allocator_type>(
@ -323,6 +342,7 @@ template <class _Alloc, bool = __has_outer_allocator<_Alloc>::value>
struct __outermost struct __outermost
{ {
typedef _Alloc type; typedef _Alloc type;
_LIBCPP_INLINE_VISIBILITY
type& operator()(type& __a) const {return __a;} type& operator()(type& __a) const {return __a;}
}; };
@ -334,12 +354,13 @@ struct __outermost<_Alloc, true>
decltype(_STD::declval<_Alloc>().outer_allocator()) decltype(_STD::declval<_Alloc>().outer_allocator())
>::type _OuterAlloc; >::type _OuterAlloc;
typedef typename __outermost<_OuterAlloc>::type type; typedef typename __outermost<_OuterAlloc>::type type;
_LIBCPP_INLINE_VISIBILITY
type& operator()(_Alloc& __a) const type& operator()(_Alloc& __a) const
{return __outermost<_OuterAlloc>()(__a.outer_allocator());} {return __outermost<_OuterAlloc>()(__a.outer_allocator());}
}; };
template <class _OuterAlloc, class... _InnerAllocs> template <class _OuterAlloc, class... _InnerAllocs>
class scoped_allocator_adaptor<_OuterAlloc, _InnerAllocs...> class _LIBCPP_VISIBLE scoped_allocator_adaptor<_OuterAlloc, _InnerAllocs...>
: public __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...> : public __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...>
{ {
typedef __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...> base; typedef __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...> base;
@ -381,11 +402,13 @@ public:
> other; > other;
}; };
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor() {} scoped_allocator_adaptor() {}
template <class _OuterA2, template <class _OuterA2,
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor(_OuterA2&& __outerAlloc, scoped_allocator_adaptor(_OuterA2&& __outerAlloc,
const _InnerAllocs& ...__innerAllocs) const _InnerAllocs& ...__innerAllocs)
: base(_STD::forward<_OuterA2>(__outerAlloc), __innerAllocs...) {} : base(_STD::forward<_OuterA2>(__outerAlloc), __innerAllocs...) {}
@ -394,6 +417,7 @@ public:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, const _OuterA2&>::value is_constructible<outer_allocator_type, const _OuterA2&>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor( scoped_allocator_adaptor(
const scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>& __other) const scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>& __other)
: base(__other) {} : base(__other) {}
@ -401,41 +425,52 @@ public:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor( scoped_allocator_adaptor(
scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>&& __other) scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>&& __other)
: base(_STD::move(__other)) {} : base(_STD::move(__other)) {}
// ~scoped_allocator_adaptor() = default; // ~scoped_allocator_adaptor() = default;
_LIBCPP_INLINE_VISIBILITY
inner_allocator_type& inner_allocator() inner_allocator_type& inner_allocator()
{return base::inner_allocator();} {return base::inner_allocator();}
_LIBCPP_INLINE_VISIBILITY
const inner_allocator_type& inner_allocator() const const inner_allocator_type& inner_allocator() const
{return base::inner_allocator();} {return base::inner_allocator();}
_LIBCPP_INLINE_VISIBILITY
outer_allocator_type& outer_allocator() outer_allocator_type& outer_allocator()
{return base::outer_allocator();} {return base::outer_allocator();}
_LIBCPP_INLINE_VISIBILITY
const outer_allocator_type& outer_allocator() const const outer_allocator_type& outer_allocator() const
{return base::outer_allocator();} {return base::outer_allocator();}
_LIBCPP_INLINE_VISIBILITY
pointer allocate(size_type __n) pointer allocate(size_type __n)
{return allocator_traits<outer_allocator_type>:: {return allocator_traits<outer_allocator_type>::
allocate(outer_allocator(), __n);} allocate(outer_allocator(), __n);}
_LIBCPP_INLINE_VISIBILITY
pointer allocate(size_type __n, const_void_pointer __hint) pointer allocate(size_type __n, const_void_pointer __hint)
{return allocator_traits<outer_allocator_type>:: {return allocator_traits<outer_allocator_type>::
allocate(outer_allocator(), __n, __hint);} allocate(outer_allocator(), __n, __hint);}
_LIBCPP_INLINE_VISIBILITY
void deallocate(pointer __p, size_type __n) void deallocate(pointer __p, size_type __n)
{allocator_traits<outer_allocator_type>:: {allocator_traits<outer_allocator_type>::
deallocate(outer_allocator(), __p, __n);} deallocate(outer_allocator(), __p, __n);}
_LIBCPP_INLINE_VISIBILITY
size_type max_size() const size_type max_size() const
{allocator_traits<outer_allocator_type>::max_size(outer_allocator());} {return allocator_traits<outer_allocator_type>::max_size(outer_allocator());}
template <class _Tp, class... _Args> template <class _Tp, class... _Args>
_LIBCPP_INLINE_VISIBILITY
void construct(_Tp* __p, _Args&& ...__args) void construct(_Tp* __p, _Args&& ...__args)
{__construct(__uses_alloc_ctor<_Tp, inner_allocator_type, _Args...>(), {__construct(__uses_alloc_ctor<_Tp, inner_allocator_type, _Args...>(),
__p, _STD::forward<_Args>(__args)...);} __p, _STD::forward<_Args>(__args)...);}
template <class _Tp> template <class _Tp>
_LIBCPP_INLINE_VISIBILITY
void destroy(_Tp* __p) void destroy(_Tp* __p)
{ {
typedef __outermost<outer_allocator_type> _OM; typedef __outermost<outer_allocator_type> _OM;
@ -443,6 +478,7 @@ public:
destroy(_OM()(outer_allocator()), __p); destroy(_OM()(outer_allocator()), __p);
} }
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor select_on_container_copy_construction() const scoped_allocator_adaptor select_on_container_copy_construction() const
{return base::select_on_container_copy_construction();} {return base::select_on_container_copy_construction();}
@ -452,11 +488,13 @@ private:
class = typename enable_if< class = typename enable_if<
is_constructible<outer_allocator_type, _OuterA2>::value is_constructible<outer_allocator_type, _OuterA2>::value
>::type> >::type>
_LIBCPP_INLINE_VISIBILITY
scoped_allocator_adaptor(_OuterA2&& __o, scoped_allocator_adaptor(_OuterA2&& __o,
const inner_allocator_type& __i) const inner_allocator_type& __i)
: base(_STD::forward<_OuterA2>(__o), __i) {} : base(_STD::forward<_OuterA2>(__o), __i) {}
template <class _Tp, class... _Args> template <class _Tp, class... _Args>
_LIBCPP_INLINE_VISIBILITY
void __construct(integral_constant<int, 0>, _Tp* __p, _Args&& ...__args) void __construct(integral_constant<int, 0>, _Tp* __p, _Args&& ...__args)
{ {
typedef __outermost<outer_allocator_type> _OM; typedef __outermost<outer_allocator_type> _OM;
@ -469,6 +507,7 @@ private:
} }
template <class _Tp, class... _Args> template <class _Tp, class... _Args>
_LIBCPP_INLINE_VISIBILITY
void __construct(integral_constant<int, 1>, _Tp* __p, _Args&& ...__args) void __construct(integral_constant<int, 1>, _Tp* __p, _Args&& ...__args)
{ {
typedef __outermost<outer_allocator_type> _OM; typedef __outermost<outer_allocator_type> _OM;
@ -483,6 +522,7 @@ private:
} }
template <class _Tp, class... _Args> template <class _Tp, class... _Args>
_LIBCPP_INLINE_VISIBILITY
void __construct(integral_constant<int, 2>, _Tp* __p, _Args&& ...__args) void __construct(integral_constant<int, 2>, _Tp* __p, _Args&& ...__args)
{ {
typedef __outermost<outer_allocator_type> _OM; typedef __outermost<outer_allocator_type> _OM;

View File

@ -310,7 +310,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Key, class _Compare = less<_Key>, template <class _Key, class _Compare = less<_Key>,
class _Allocator = allocator<_Key> > class _Allocator = allocator<_Key> >
class set class _LIBCPP_VISIBLE set
{ {
public: public:
// types: // types:
@ -339,11 +339,14 @@ public:
typedef _STD::reverse_iterator<iterator> reverse_iterator; typedef _STD::reverse_iterator<iterator> reverse_iterator;
typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator; typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator;
_LIBCPP_INLINE_VISIBILITY
explicit set(const value_compare& __comp = value_compare()) explicit set(const value_compare& __comp = value_compare())
: __tree_(__comp) {} : __tree_(__comp) {}
_LIBCPP_INLINE_VISIBILITY
set(const value_compare& __comp, const allocator_type& __a) set(const value_compare& __comp, const allocator_type& __a)
: __tree_(__comp, __a) {} : __tree_(__comp, __a) {}
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
set(_InputIterator __f, _InputIterator __l, set(_InputIterator __f, _InputIterator __l,
const value_compare& __comp = value_compare()) const value_compare& __comp = value_compare())
: __tree_(__comp) : __tree_(__comp)
@ -352,6 +355,7 @@ public:
} }
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
set(_InputIterator __f, _InputIterator __l, const value_compare& __comp, set(_InputIterator __f, _InputIterator __l, const value_compare& __comp,
const allocator_type& __a) const allocator_type& __a)
: __tree_(__comp, __a) : __tree_(__comp, __a)
@ -359,6 +363,7 @@ public:
insert(__f, __l); insert(__f, __l);
} }
_LIBCPP_INLINE_VISIBILITY
set(const set& __s) set(const set& __s)
: __tree_(__s.__tree_) : __tree_(__s.__tree_)
{ {
@ -366,13 +371,16 @@ public:
} }
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
set(set&& __s) set(set&& __s)
: __tree_(_STD::move(__s.__tree_)) {} : __tree_(_STD::move(__s.__tree_)) {}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
explicit set(const allocator_type& __a) explicit set(const allocator_type& __a)
: __tree_(__a) {} : __tree_(__a) {}
_LIBCPP_INLINE_VISIBILITY
set(const set& __s, const allocator_type& __a) set(const set& __s, const allocator_type& __a)
: __tree_(__s.__tree_.value_comp(), __a) : __tree_(__s.__tree_.value_comp(), __a)
{ {
@ -383,12 +391,14 @@ public:
set(set&& __s, const allocator_type& __a); set(set&& __s, const allocator_type& __a);
#endif #endif
_LIBCPP_INLINE_VISIBILITY
set(initializer_list<value_type> __il, const value_compare& __comp = value_compare()) set(initializer_list<value_type> __il, const value_compare& __comp = value_compare())
: __tree_(__comp) : __tree_(__comp)
{ {
insert(__il.begin(), __il.end()); insert(__il.begin(), __il.end());
} }
_LIBCPP_INLINE_VISIBILITY
set(initializer_list<value_type> __il, const value_compare& __comp, set(initializer_list<value_type> __il, const value_compare& __comp,
const allocator_type& __a) const allocator_type& __a)
: __tree_(__comp, __a) : __tree_(__comp, __a)
@ -396,6 +406,7 @@ public:
insert(__il.begin(), __il.end()); insert(__il.begin(), __il.end());
} }
_LIBCPP_INLINE_VISIBILITY
set& operator=(initializer_list<value_type> __il) set& operator=(initializer_list<value_type> __il)
{ {
__tree_.__assign_unique(__il.begin(), __il.end()); __tree_.__assign_unique(__il.begin(), __il.end());
@ -403,6 +414,7 @@ public:
} }
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
set& operator=(set&& __s) set& operator=(set&& __s)
{ {
__tree_ = _STD::move(__s.__tree_); __tree_ = _STD::move(__s.__tree_);
@ -410,84 +422,124 @@ public:
} }
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator begin() {return __tree_.begin();} iterator begin() {return __tree_.begin();}
_LIBCPP_INLINE_VISIBILITY
const_iterator begin() const {return __tree_.begin();} const_iterator begin() const {return __tree_.begin();}
_LIBCPP_INLINE_VISIBILITY
iterator end() {return __tree_.end();} iterator end() {return __tree_.end();}
_LIBCPP_INLINE_VISIBILITY
const_iterator end() const {return __tree_.end();} const_iterator end() const {return __tree_.end();}
_LIBCPP_INLINE_VISIBILITY
reverse_iterator rbegin() {return reverse_iterator(end());} reverse_iterator rbegin() {return reverse_iterator(end());}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator rbegin() const {return const_reverse_iterator(end());} const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
_LIBCPP_INLINE_VISIBILITY
reverse_iterator rend() {return reverse_iterator(begin());} reverse_iterator rend() {return reverse_iterator(begin());}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator rend() const {return const_reverse_iterator(begin());} const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
_LIBCPP_INLINE_VISIBILITY
const_iterator cbegin() const {return begin();} const_iterator cbegin() const {return begin();}
_LIBCPP_INLINE_VISIBILITY
const_iterator cend() const {return end();} const_iterator cend() const {return end();}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator crbegin() const {return rbegin();} const_reverse_iterator crbegin() const {return rbegin();}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator crend() const {return rend();} const_reverse_iterator crend() const {return rend();}
_LIBCPP_INLINE_VISIBILITY
bool empty() const {return __tree_.size() == 0;} bool empty() const {return __tree_.size() == 0;}
_LIBCPP_INLINE_VISIBILITY
size_type size() const {return __tree_.size();} size_type size() const {return __tree_.size();}
_LIBCPP_INLINE_VISIBILITY
size_type max_size() const {return __tree_.max_size();} size_type max_size() const {return __tree_.max_size();}
// modifiers: // modifiers:
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
template <class... _Args> template <class... _Args>
_LIBCPP_INLINE_VISIBILITY
pair<iterator, bool> emplace(_Args&&... __args) pair<iterator, bool> emplace(_Args&&... __args)
{return __tree_.__emplace_unique(_STD::forward<_Args>(__args)...);} {return __tree_.__emplace_unique(_STD::forward<_Args>(__args)...);}
template <class... _Args> template <class... _Args>
_LIBCPP_INLINE_VISIBILITY
iterator emplace_hint(const_iterator __p, _Args&&... __args) iterator emplace_hint(const_iterator __p, _Args&&... __args)
{return __tree_.__emplace_hint_unique(__p, _STD::forward<_Args>(__args)...);} {return __tree_.__emplace_hint_unique(__p, _STD::forward<_Args>(__args)...);}
#endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
_LIBCPP_INLINE_VISIBILITY
pair<iterator,bool> insert(const value_type& __v) pair<iterator,bool> insert(const value_type& __v)
{return __tree_.__insert_unique(__v);} {return __tree_.__insert_unique(__v);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
pair<iterator,bool> insert(value_type&& __v) pair<iterator,bool> insert(value_type&& __v)
{return __tree_.__insert_unique(_STD::move(__v));} {return __tree_.__insert_unique(_STD::move(__v));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __p, const value_type& __v) iterator insert(const_iterator __p, const value_type& __v)
{return __tree_.__insert_unique(__p, __v);} {return __tree_.__insert_unique(__p, __v);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __p, value_type&& __v) iterator insert(const_iterator __p, value_type&& __v)
{return __tree_.__insert_unique(__p, _STD::move(__v));} {return __tree_.__insert_unique(__p, _STD::move(__v));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
void insert(_InputIterator __f, _InputIterator __l) void insert(_InputIterator __f, _InputIterator __l)
{ {
for (const_iterator __e = cend(); __f != __l; ++__f) for (const_iterator __e = cend(); __f != __l; ++__f)
__tree_.__insert_unique(__e, *__f); __tree_.__insert_unique(__e, *__f);
} }
_LIBCPP_INLINE_VISIBILITY
void insert(initializer_list<value_type> __il) void insert(initializer_list<value_type> __il)
{insert(__il.begin(), __il.end());} {insert(__il.begin(), __il.end());}
_LIBCPP_INLINE_VISIBILITY
iterator erase(const_iterator __p) {return __tree_.erase(__p);} iterator erase(const_iterator __p) {return __tree_.erase(__p);}
_LIBCPP_INLINE_VISIBILITY
size_type erase(const key_type& __k) size_type erase(const key_type& __k)
{return __tree_.__erase_unique(__k);} {return __tree_.__erase_unique(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator erase(const_iterator __f, const_iterator __l) iterator erase(const_iterator __f, const_iterator __l)
{return __tree_.erase(__f, __l);} {return __tree_.erase(__f, __l);}
_LIBCPP_INLINE_VISIBILITY
void clear() {__tree_.clear();} void clear() {__tree_.clear();}
_LIBCPP_INLINE_VISIBILITY
void swap(set& __s) {__tree_.swap(__s.__tree_);} void swap(set& __s) {__tree_.swap(__s.__tree_);}
_LIBCPP_INLINE_VISIBILITY
allocator_type get_allocator() const {return __tree_.__alloc();} allocator_type get_allocator() const {return __tree_.__alloc();}
_LIBCPP_INLINE_VISIBILITY
key_compare key_comp() const {return __tree_.value_comp();} key_compare key_comp() const {return __tree_.value_comp();}
_LIBCPP_INLINE_VISIBILITY
value_compare value_comp() const {return __tree_.value_comp();} value_compare value_comp() const {return __tree_.value_comp();}
// set operations: // set operations:
_LIBCPP_INLINE_VISIBILITY
iterator find(const key_type& __k) {return __tree_.find(__k);} iterator find(const key_type& __k) {return __tree_.find(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator find(const key_type& __k) const {return __tree_.find(__k);} const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
_LIBCPP_INLINE_VISIBILITY
size_type count(const key_type& __k) const size_type count(const key_type& __k) const
{return __tree_.__count_unique(__k);} {return __tree_.__count_unique(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator lower_bound(const key_type& __k) iterator lower_bound(const key_type& __k)
{return __tree_.lower_bound(__k);} {return __tree_.lower_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator lower_bound(const key_type& __k) const const_iterator lower_bound(const key_type& __k) const
{return __tree_.lower_bound(__k);} {return __tree_.lower_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator upper_bound(const key_type& __k) iterator upper_bound(const key_type& __k)
{return __tree_.upper_bound(__k);} {return __tree_.upper_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator upper_bound(const key_type& __k) const const_iterator upper_bound(const key_type& __k) const
{return __tree_.upper_bound(__k);} {return __tree_.upper_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
pair<iterator,iterator> equal_range(const key_type& __k) pair<iterator,iterator> equal_range(const key_type& __k)
{return __tree_.__equal_range_unique(__k);} {return __tree_.__equal_range_unique(__k);}
_LIBCPP_INLINE_VISIBILITY
pair<const_iterator,const_iterator> equal_range(const key_type& __k) const pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
{return __tree_.__equal_range_unique(__k);} {return __tree_.__equal_range_unique(__k);}
}; };
@ -509,7 +561,7 @@ set<_Key, _Compare, _Allocator>::set(set&& __s, const allocator_type& __a)
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator==(const set<_Key, _Compare, _Allocator>& __x, operator==(const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -518,7 +570,7 @@ operator==(const set<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator< (const set<_Key, _Compare, _Allocator>& __x, operator< (const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -527,7 +579,7 @@ operator< (const set<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator!=(const set<_Key, _Compare, _Allocator>& __x, operator!=(const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -536,7 +588,7 @@ operator!=(const set<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator> (const set<_Key, _Compare, _Allocator>& __x, operator> (const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -545,7 +597,7 @@ operator> (const set<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator>=(const set<_Key, _Compare, _Allocator>& __x, operator>=(const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -554,7 +606,7 @@ operator>=(const set<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator<=(const set<_Key, _Compare, _Allocator>& __x, operator<=(const set<_Key, _Compare, _Allocator>& __x,
const set<_Key, _Compare, _Allocator>& __y) const set<_Key, _Compare, _Allocator>& __y)
@ -564,7 +616,7 @@ operator<=(const set<_Key, _Compare, _Allocator>& __x,
// specialized algorithms: // specialized algorithms:
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
void void
swap(set<_Key, _Compare, _Allocator>& __x, swap(set<_Key, _Compare, _Allocator>& __x,
set<_Key, _Compare, _Allocator>& __y) set<_Key, _Compare, _Allocator>& __y)
@ -574,7 +626,7 @@ swap(set<_Key, _Compare, _Allocator>& __x,
template <class _Key, class _Compare = less<_Key>, template <class _Key, class _Compare = less<_Key>,
class _Allocator = allocator<_Key> > class _Allocator = allocator<_Key> >
class multiset class _LIBCPP_VISIBLE multiset
{ {
public: public:
// types: // types:
@ -604,11 +656,14 @@ public:
typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator; typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator;
// construct/copy/destroy: // construct/copy/destroy:
_LIBCPP_INLINE_VISIBILITY
explicit multiset(const value_compare& __comp = value_compare()) explicit multiset(const value_compare& __comp = value_compare())
: __tree_(__comp) {} : __tree_(__comp) {}
_LIBCPP_INLINE_VISIBILITY
multiset(const value_compare& __comp, const allocator_type& __a) multiset(const value_compare& __comp, const allocator_type& __a)
: __tree_(__comp, __a) {} : __tree_(__comp, __a) {}
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
multiset(_InputIterator __f, _InputIterator __l, multiset(_InputIterator __f, _InputIterator __l,
const value_compare& __comp = value_compare()) const value_compare& __comp = value_compare())
: __tree_(__comp) : __tree_(__comp)
@ -617,6 +672,7 @@ public:
} }
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
multiset(_InputIterator __f, _InputIterator __l, multiset(_InputIterator __f, _InputIterator __l,
const value_compare& __comp, const allocator_type& __a) const value_compare& __comp, const allocator_type& __a)
: __tree_(__comp, __a) : __tree_(__comp, __a)
@ -624,6 +680,7 @@ public:
insert(__f, __l); insert(__f, __l);
} }
_LIBCPP_INLINE_VISIBILITY
multiset(const multiset& __s) multiset(const multiset& __s)
: __tree_(__s.__tree_.value_comp(), : __tree_(__s.__tree_.value_comp(),
__alloc_traits::select_on_container_copy_construction(__s.__tree_.__alloc())) __alloc_traits::select_on_container_copy_construction(__s.__tree_.__alloc()))
@ -632,11 +689,14 @@ public:
} }
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
multiset(multiset&& __s) multiset(multiset&& __s)
: __tree_(_STD::move(__s.__tree_)) {} : __tree_(_STD::move(__s.__tree_)) {}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
explicit multiset(const allocator_type& __a) explicit multiset(const allocator_type& __a)
: __tree_(__a) {} : __tree_(__a) {}
_LIBCPP_INLINE_VISIBILITY
multiset(const multiset& __s, const allocator_type& __a) multiset(const multiset& __s, const allocator_type& __a)
: __tree_(__s.__tree_.value_comp(), __a) : __tree_(__s.__tree_.value_comp(), __a)
{ {
@ -646,12 +706,14 @@ public:
multiset(multiset&& __s, const allocator_type& __a); multiset(multiset&& __s, const allocator_type& __a);
#endif #endif
_LIBCPP_INLINE_VISIBILITY
multiset(initializer_list<value_type> __il, const value_compare& __comp = value_compare()) multiset(initializer_list<value_type> __il, const value_compare& __comp = value_compare())
: __tree_(__comp) : __tree_(__comp)
{ {
insert(__il.begin(), __il.end()); insert(__il.begin(), __il.end());
} }
_LIBCPP_INLINE_VISIBILITY
multiset(initializer_list<value_type> __il, const value_compare& __comp, multiset(initializer_list<value_type> __il, const value_compare& __comp,
const allocator_type& __a) const allocator_type& __a)
: __tree_(__comp, __a) : __tree_(__comp, __a)
@ -659,6 +721,7 @@ public:
insert(__il.begin(), __il.end()); insert(__il.begin(), __il.end());
} }
_LIBCPP_INLINE_VISIBILITY
multiset& operator=(initializer_list<value_type> __il) multiset& operator=(initializer_list<value_type> __il)
{ {
__tree_.__assign_multi(__il.begin(), __il.end()); __tree_.__assign_multi(__il.begin(), __il.end());
@ -666,6 +729,7 @@ public:
} }
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
multiset& operator=(multiset&& __s) multiset& operator=(multiset&& __s)
{ {
__tree_ = _STD::move(__s.__tree_); __tree_ = _STD::move(__s.__tree_);
@ -673,83 +737,123 @@ public:
} }
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator begin() {return __tree_.begin();} iterator begin() {return __tree_.begin();}
_LIBCPP_INLINE_VISIBILITY
const_iterator begin() const {return __tree_.begin();} const_iterator begin() const {return __tree_.begin();}
_LIBCPP_INLINE_VISIBILITY
iterator end() {return __tree_.end();} iterator end() {return __tree_.end();}
_LIBCPP_INLINE_VISIBILITY
const_iterator end() const {return __tree_.end();} const_iterator end() const {return __tree_.end();}
_LIBCPP_INLINE_VISIBILITY
reverse_iterator rbegin() {return reverse_iterator(end());} reverse_iterator rbegin() {return reverse_iterator(end());}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator rbegin() const {return const_reverse_iterator(end());} const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
_LIBCPP_INLINE_VISIBILITY
reverse_iterator rend() {return reverse_iterator(begin());} reverse_iterator rend() {return reverse_iterator(begin());}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator rend() const {return const_reverse_iterator(begin());} const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
_LIBCPP_INLINE_VISIBILITY
const_iterator cbegin() const {return begin();} const_iterator cbegin() const {return begin();}
_LIBCPP_INLINE_VISIBILITY
const_iterator cend() const {return end();} const_iterator cend() const {return end();}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator crbegin() const {return rbegin();} const_reverse_iterator crbegin() const {return rbegin();}
_LIBCPP_INLINE_VISIBILITY
const_reverse_iterator crend() const {return rend();} const_reverse_iterator crend() const {return rend();}
_LIBCPP_INLINE_VISIBILITY
bool empty() const {return __tree_.size() == 0;} bool empty() const {return __tree_.size() == 0;}
_LIBCPP_INLINE_VISIBILITY
size_type size() const {return __tree_.size();} size_type size() const {return __tree_.size();}
_LIBCPP_INLINE_VISIBILITY
size_type max_size() const {return __tree_.max_size();} size_type max_size() const {return __tree_.max_size();}
// modifiers: // modifiers:
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
template <class... _Args> template <class... _Args>
_LIBCPP_INLINE_VISIBILITY
iterator emplace(_Args&&... __args) iterator emplace(_Args&&... __args)
{return __tree_.__emplace_multi(_STD::forward<_Args>(__args)...);} {return __tree_.__emplace_multi(_STD::forward<_Args>(__args)...);}
template <class... _Args> template <class... _Args>
_LIBCPP_INLINE_VISIBILITY
iterator emplace_hint(const_iterator __p, _Args&&... __args) iterator emplace_hint(const_iterator __p, _Args&&... __args)
{return __tree_.__emplace_hint_multi(__p, _STD::forward<_Args>(__args)...);} {return __tree_.__emplace_hint_multi(__p, _STD::forward<_Args>(__args)...);}
#endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
_LIBCPP_INLINE_VISIBILITY
iterator insert(const value_type& __v) iterator insert(const value_type& __v)
{return __tree_.__insert_multi(__v);} {return __tree_.__insert_multi(__v);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator insert(value_type&& __v) iterator insert(value_type&& __v)
{return __tree_.__insert_multi(_STD::move(__v));} {return __tree_.__insert_multi(_STD::move(__v));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __p, const value_type& __v) iterator insert(const_iterator __p, const value_type& __v)
{return __tree_.__insert_multi(__p, __v);} {return __tree_.__insert_multi(__p, __v);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
_LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __p, value_type&& __v) iterator insert(const_iterator __p, value_type&& __v)
{return __tree_.__insert_multi(_STD::move(__v));} {return __tree_.__insert_multi(_STD::move(__v));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _InputIterator> template <class _InputIterator>
_LIBCPP_INLINE_VISIBILITY
void insert(_InputIterator __f, _InputIterator __l) void insert(_InputIterator __f, _InputIterator __l)
{ {
for (const_iterator __e = cend(); __f != __l; ++__f) for (const_iterator __e = cend(); __f != __l; ++__f)
__tree_.__insert_multi(__e, *__f); __tree_.__insert_multi(__e, *__f);
} }
_LIBCPP_INLINE_VISIBILITY
void insert(initializer_list<value_type> __il) void insert(initializer_list<value_type> __il)
{insert(__il.begin(), __il.end());} {insert(__il.begin(), __il.end());}
_LIBCPP_INLINE_VISIBILITY
iterator erase(const_iterator __p) {return __tree_.erase(__p);} iterator erase(const_iterator __p) {return __tree_.erase(__p);}
_LIBCPP_INLINE_VISIBILITY
size_type erase(const key_type& __k) {return __tree_.__erase_multi(__k);} size_type erase(const key_type& __k) {return __tree_.__erase_multi(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator erase(const_iterator __f, const_iterator __l) iterator erase(const_iterator __f, const_iterator __l)
{return __tree_.erase(__f, __l);} {return __tree_.erase(__f, __l);}
_LIBCPP_INLINE_VISIBILITY
void clear() {__tree_.clear();} void clear() {__tree_.clear();}
_LIBCPP_INLINE_VISIBILITY
void swap(multiset& __s) {__tree_.swap(__s.__tree_);} void swap(multiset& __s) {__tree_.swap(__s.__tree_);}
_LIBCPP_INLINE_VISIBILITY
allocator_type get_allocator() const {return __tree_.__alloc();} allocator_type get_allocator() const {return __tree_.__alloc();}
_LIBCPP_INLINE_VISIBILITY
key_compare key_comp() const {return __tree_.value_comp();} key_compare key_comp() const {return __tree_.value_comp();}
_LIBCPP_INLINE_VISIBILITY
value_compare value_comp() const {return __tree_.value_comp();} value_compare value_comp() const {return __tree_.value_comp();}
// set operations: // set operations:
_LIBCPP_INLINE_VISIBILITY
iterator find(const key_type& __k) {return __tree_.find(__k);} iterator find(const key_type& __k) {return __tree_.find(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator find(const key_type& __k) const {return __tree_.find(__k);} const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
_LIBCPP_INLINE_VISIBILITY
size_type count(const key_type& __k) const size_type count(const key_type& __k) const
{return __tree_.__count_multi(__k);} {return __tree_.__count_multi(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator lower_bound(const key_type& __k) iterator lower_bound(const key_type& __k)
{return __tree_.lower_bound(__k);} {return __tree_.lower_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator lower_bound(const key_type& __k) const const_iterator lower_bound(const key_type& __k) const
{return __tree_.lower_bound(__k);} {return __tree_.lower_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
iterator upper_bound(const key_type& __k) iterator upper_bound(const key_type& __k)
{return __tree_.upper_bound(__k);} {return __tree_.upper_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
const_iterator upper_bound(const key_type& __k) const const_iterator upper_bound(const key_type& __k) const
{return __tree_.upper_bound(__k);} {return __tree_.upper_bound(__k);}
_LIBCPP_INLINE_VISIBILITY
pair<iterator,iterator> equal_range(const key_type& __k) pair<iterator,iterator> equal_range(const key_type& __k)
{return __tree_.__equal_range_multi(__k);} {return __tree_.__equal_range_multi(__k);}
_LIBCPP_INLINE_VISIBILITY
pair<const_iterator,const_iterator> equal_range(const key_type& __k) const pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
{return __tree_.__equal_range_multi(__k);} {return __tree_.__equal_range_multi(__k);}
}; };
@ -771,7 +875,7 @@ multiset<_Key, _Compare, _Allocator>::multiset(multiset&& __s, const allocator_t
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator==(const multiset<_Key, _Compare, _Allocator>& __x, operator==(const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -780,7 +884,7 @@ operator==(const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator< (const multiset<_Key, _Compare, _Allocator>& __x, operator< (const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -789,7 +893,7 @@ operator< (const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator!=(const multiset<_Key, _Compare, _Allocator>& __x, operator!=(const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -798,7 +902,7 @@ operator!=(const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator> (const multiset<_Key, _Compare, _Allocator>& __x, operator> (const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -807,7 +911,7 @@ operator> (const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator>=(const multiset<_Key, _Compare, _Allocator>& __x, operator>=(const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -816,7 +920,7 @@ operator>=(const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
bool bool
operator<=(const multiset<_Key, _Compare, _Allocator>& __x, operator<=(const multiset<_Key, _Compare, _Allocator>& __x,
const multiset<_Key, _Compare, _Allocator>& __y) const multiset<_Key, _Compare, _Allocator>& __y)
@ -825,7 +929,7 @@ operator<=(const multiset<_Key, _Compare, _Allocator>& __x,
} }
template <class _Key, class _Compare, class _Allocator> template <class _Key, class _Compare, class _Allocator>
inline inline _LIBCPP_INLINE_VISIBILITY
void void
swap(multiset<_Key, _Compare, _Allocator>& __x, swap(multiset<_Key, _Compare, _Allocator>& __x,
multiset<_Key, _Compare, _Allocator>& __y) multiset<_Key, _Compare, _Allocator>& __y)