STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Macros | Typedefs | Functions
xmemory0 File Reference
#include <cstdint>
#include <cstdlib>
#include <limits>
#include <new>
#include <xutility>
#include <xatomic0.h>
#include <xatomic.h>

Classes

struct  _Is_simple_alloc< _Alty >
 
struct  _Simple_types< _Value_type >
 
struct  _Get_first_parameter< _Ty >
 
struct  _Get_first_parameter< _Ty< _First, _Rest...> >
 
struct  _Replace_first_parameter< _Newfirst, _Ty >
 
struct  _Replace_first_parameter< _Newfirst, _Ty< _First, _Rest...> >
 
struct  _Get_element_type< _Ty, class >
 
struct  _Get_element_type< _Ty, void_t< typename _Ty::element_type > >
 
struct  _Get_ptr_difference_type< _Ty, class >
 
struct  _Get_ptr_difference_type< _Ty, void_t< typename _Ty::difference_type > >
 
struct  _Get_rebind_alias< _Ty, _Other, class >
 
struct  _Get_rebind_alias< _Ty, _Other, void_t< typename _Ty::template rebind< _Other > > >
 
struct  pointer_traits< _Ty >
 
struct  pointer_traits< _Ty * >
 
struct  _Get_pointer_type< _Ty, class >
 
struct  _Get_pointer_type< _Ty, void_t< typename _Ty::pointer > >
 
struct  _Get_const_pointer_type< _Ty, class >
 
struct  _Get_const_pointer_type< _Ty, void_t< typename _Ty::const_pointer > >
 
struct  _Get_void_pointer_type< _Ty, class >
 
struct  _Get_void_pointer_type< _Ty, void_t< typename _Ty::void_pointer > >
 
struct  _Get_const_void_pointer_type< _Ty, class >
 
struct  _Get_const_void_pointer_type< _Ty, void_t< typename _Ty::const_void_pointer > >
 
struct  _Get_difference_type< _Ty, class >
 
struct  _Get_difference_type< _Ty, void_t< typename _Ty::difference_type > >
 
struct  _Get_size_type< _Ty, class >
 
struct  _Get_size_type< _Ty, void_t< typename _Ty::size_type > >
 
struct  _Get_propagate_on_container_copy< _Ty, class >
 
struct  _Get_propagate_on_container_copy< _Ty, void_t< typename _Ty::propagate_on_container_copy_assignment > >
 
struct  _Get_propagate_on_container_move< _Ty, class >
 
struct  _Get_propagate_on_container_move< _Ty, void_t< typename _Ty::propagate_on_container_move_assignment > >
 
struct  _Get_propagate_on_container_swap< _Ty, class >
 
struct  _Get_propagate_on_container_swap< _Ty, void_t< typename _Ty::propagate_on_container_swap > >
 
struct  _Get_is_always_equal< _Ty, class >
 
struct  _Get_is_always_equal< _Ty, void_t< typename _Ty::is_always_equal > >
 
struct  _Get_rebind_type< _Ty, _Other, class >
 
struct  _Get_rebind_type< _Ty, _Other, void_t< typename _Ty::template rebind< _Other >::other > >
 
class  allocator< _Ty >
 
struct  _Wrap_alloc< _Alloc >
 
struct  _Unwrap_alloc< _Alloc >
 
struct  _Unwrap_alloc< _Wrap_alloc< _Alloc > >
 
struct  _Is_default_allocator< _Alloc, class >
 
struct  _Is_default_allocator< allocator< _Ty >, typename allocator< _Ty >::_Not_user_specialized >
 
struct  _Alloc_allocate
 
struct  _Has_no_alloc_construct_tag
 
struct  _Has_no_alloc_construct< _Void, _Types >
 
struct  _Has_no_alloc_construct< void_t< _Has_no_alloc_construct_tag, decltype(_STD declval< _Alloc & >().construct(_STD declval< _Ptr >(), _STD declval< _Args >()...))>, _Alloc, _Ptr, _Args...>
 
struct  _Has_no_alloc_destroy_tag
 
struct  _Has_no_alloc_destroy< _Alloc, _Ptr, class >
 
struct  _Has_no_alloc_destroy< _Alloc, _Ptr, void_t< _Has_no_alloc_destroy_tag, decltype(_STD declval< _Alloc & >().destroy(_STD declval< _Ptr >()))> >
 
struct  _Alloc_max_size
 
struct  _Alloc_select
 
struct  allocator_traits< _Alloc >
 
class  allocator< _Ty >
 
struct  allocator< _Ty >::rebind< _Other >
 
class  allocator< void >
 
struct  allocator< void >::rebind< _Other >
 
struct  allocator_traits< allocator< _Ty > >
 
struct  _Wrap_alloc< _Alloc >
 
struct  _Wrap_alloc< _Alloc >::rebind< _Other >
 

Macros

#define _XMEMORY0_
 
#define _DECLSPEC_ALLOCATOR   __declspec(allocator)
 
#define _BIG_ALLOCATION_THRESHOLD   4096
 
#define _BIG_ALLOCATION_ALIGNMENT   32
 
#define _NON_USER_SIZE   (sizeof(void *) + _BIG_ALLOCATION_ALIGNMENT - 1)
 
#define _MT_INCR(x)   _Inc_atomic_counter_explicit(x, memory_order_relaxed)
 
#define _MT_DECR(x)   _Dec_atomic_counter_explicit(x, memory_order_acq_rel)
 

Typedefs

template<class _Alloc >
using _Unwrap_alloc_t = typename _Unwrap_alloc< _Alloc >::type
 
template<class _Alloc , class _Ptr , class... _Args>
using _Uses_default_construct = disjunction< _Is_default_allocator< _Alloc >, _Has_no_alloc_construct< void, _Alloc, _Ptr, _Args...>>
 
template<class _Alloc , class _Ptr , class... _Args>
using _Uses_default_construct_t = typename _Uses_default_construct< _Alloc, _Ptr, _Args...>::type
 
template<class _Alloc , class _Ptr >
using _Uses_default_destroy = disjunction< _Is_default_allocator< _Alloc >, _Has_no_alloc_destroy< _Alloc, _Ptr >>
 
template<class _Alloc , class _Ptr >
using _Uses_default_destroy_t = typename _Uses_default_destroy< _Alloc, _Ptr >::type
 

Functions

_DECLSPEC_ALLOCATOR void_Allocate (size_t _Count, size_t _Sz, bool _Try_aligned_allocation=true)
 
void _Deallocate (void *_Ptr, size_t _Count, size_t _Sz)
 
template<class _Ty , class... _Types>
void _Construct_in_place (_Ty &_Obj, _Types &&..._Args)
 
template<class _Ty >
void _Destroy_in_place (_Ty &_Obj) _NOEXCEPT
 
template<class _Ptrty >
auto _Const_cast (_Ptrty _Ptr)
 
template<class _Ty >
auto _Const_cast (_Ty *_Ptr)
 
template<class _Ty , class _Other >
bool operator== (const allocator< _Ty > &, const allocator< _Other > &) _THROW0()
 
template<class _Ty , class _Other >
bool operator!= (const allocator< _Ty > &, const allocator< _Other > &) _THROW0()
 
template<class _Ty , class _Other >
bool operator== (const _Wrap_alloc< _Ty > &_Left, const _Wrap_alloc< _Other > &_Right) _THROW0()
 
template<class _Ty , class _Other >
bool operator!= (const _Wrap_alloc< _Ty > &_Left, const _Wrap_alloc< _Other > &_Right) _THROW0()
 
template<class _Alty >
void _Pocca (_Alty &_Left, const _Alty &_Right, true_type) _NOEXCEPT
 
template<class _Alty >
void _Pocca (_Alty &, const _Alty &, false_type) _NOEXCEPT
 
template<class _Alty >
void _Pocca (_Alty &_Left, const _Alty &_Right) _NOEXCEPT
 
template<class _Alty >
void _Pocma (_Alty &_Left, _Alty &_Right, true_type) _NOEXCEPT
 
template<class _Alty >
void _Pocma (_Alty &, _Alty &, false_type) _NOEXCEPT
 
template<class _Alty >
void _Pocma (_Alty &_Left, _Alty &_Right) _NOEXCEPT
 
template<class _Alty >
void _Pocs (_Alty &_Left, _Alty &_Right, true_type) _NOEXCEPT
 
template<class _Alty >
void _Pocs (_Alty &_Left, _Alty &_Right, false_type) _NOEXCEPT
 
template<class _Alty >
void _Pocs (_Alty &_Left, _Alty &_Right) _NOEXCEPT
 
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range1 (_Ptr _First, _Ptr _Last, _Wrap_alloc< _Alloc > &_Al, false_type)
 
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range1 (_Ptr, _Ptr, _Wrap_alloc< _Alloc > &, true_type)
 
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range (_Ptr _First, _Ptr _Last, _Wrap_alloc< _Alloc > &_Al)
 
template<class _FwdIt >
void _Destroy_range1 (_FwdIt _First, _FwdIt _Last, false_type)
 
template<class _FwdIt >
void _Destroy_range1 (_FwdIt, _FwdIt, true_type)
 
template<class _FwdIt >
void _Destroy_range (_FwdIt _First, _FwdIt _Last)
 

Macro Definition Documentation

#define _BIG_ALLOCATION_ALIGNMENT   32
#define _BIG_ALLOCATION_THRESHOLD   4096
#define _DECLSPEC_ALLOCATOR   __declspec(allocator)
#define _MT_DECR (   x)    _Dec_atomic_counter_explicit(x, memory_order_acq_rel)
#define _MT_INCR (   x)    _Inc_atomic_counter_explicit(x, memory_order_relaxed)
#define _NON_USER_SIZE   (sizeof(void *) + _BIG_ALLOCATION_ALIGNMENT - 1)
#define _XMEMORY0_

Typedef Documentation

template<class _Alloc >
using _Unwrap_alloc_t = typename _Unwrap_alloc<_Alloc>::type
template<class _Alloc , class _Ptr , class... _Args>
using _Uses_default_construct = disjunction< _Is_default_allocator<_Alloc>, _Has_no_alloc_construct<void, _Alloc, _Ptr, _Args...>>
template<class _Alloc , class _Ptr , class... _Args>
using _Uses_default_construct_t = typename _Uses_default_construct<_Alloc, _Ptr, _Args...>::type
template<class _Alloc , class _Ptr >
using _Uses_default_destroy = disjunction< _Is_default_allocator<_Alloc>, _Has_no_alloc_destroy<_Alloc, _Ptr>>
template<class _Alloc , class _Ptr >
using _Uses_default_destroy_t = typename _Uses_default_destroy<_Alloc, _Ptr>::type

Function Documentation

_DECLSPEC_ALLOCATOR void* _Allocate ( size_t  _Count,
size_t  _Sz,
bool  _Try_aligned_allocation = true 
)
inline
50  { // allocate storage for _Count elements of size _Sz
51  void *_Ptr = 0;
52 
53  if (_Count == 0)
54  return (_Ptr);
55 
56  // check overflow of multiply
57  if ((size_t)(-1) / _Sz < _Count)
58  _Xbad_alloc(); // report no memory
59  const size_t _User_size = _Count * _Sz;
60 
61  #if defined(_M_IX86) || defined(_M_X64)
62  if (_Try_aligned_allocation
63  && _BIG_ALLOCATION_THRESHOLD <= _User_size)
64  { // allocate large block
65  static_assert(sizeof (void *) < _BIG_ALLOCATION_ALIGNMENT,
66  "Big allocations should at least match vector register size");
67  const size_t _Block_size = _NON_USER_SIZE + _User_size;
68  if (_Block_size <= _User_size)
69  _Xbad_alloc(); // report no memory
70  const uintptr_t _Ptr_container =
71  reinterpret_cast<uintptr_t>(::operator new(_Block_size));
72  _SCL_SECURE_ALWAYS_VALIDATE(_Ptr_container != 0);
73  _Ptr = reinterpret_cast<void *>((_Ptr_container + _NON_USER_SIZE)
74  & ~(_BIG_ALLOCATION_ALIGNMENT - 1));
75  static_cast<uintptr_t *>(_Ptr)[-1] = _Ptr_container;
76 
77  #ifdef _DEBUG
78  static_cast<uintptr_t *>(_Ptr)[-2] = _BIG_ALLOCATION_SENTINEL;
79  #endif /* _DEBUG */
80  }
81  else
82  #else /* defined(_M_IX86) || defined(_M_X64) */
83  static_cast<void>(_Try_aligned_allocation);
84  #endif /* defined(_M_IX86) || defined(_M_X64) */
85 
86  { // allocate normal block
87  _Ptr = ::operator new(_User_size);
88  _SCL_SECURE_ALWAYS_VALIDATE(_Ptr != 0);
89  }
90  return (_Ptr);
91  }
#define _BIG_ALLOCATION_THRESHOLD
Definition: xmemory0:26
#define _BIG_ALLOCATION_ALIGNMENT
Definition: xmemory0:27
unsigned int uintptr_t
Definition: vadefs.h:30
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_alloc()
_Diff _Count
Definition: algorithm:1941
#define _SCL_SECURE_ALWAYS_VALIDATE(cond)
Definition: yvals.h:382
#define _NON_USER_SIZE
Definition: xmemory0:33
template<class _Ptrty >
auto _Const_cast ( _Ptrty  _Ptr)
inline
304  { // remove constness from a fancy pointer
305  using _Elem = typename pointer_traits<_Ptrty>::element_type;
306  using _Modifiable = remove_const_t<_Elem>;
307  using _Dest = typename pointer_traits<_Ptrty>::template rebind<_Modifiable>;
308 
309  return (pointer_traits<_Dest>::pointer_to(const_cast<_Modifiable&>(*_Ptr)));
310  }
typename remove_const< _Ty >::type remove_const_t
Definition: type_traits:2042
unsigned _Dest
Definition: mbstring.h:107
_Get_element_type< _Ty >::type element_type
Definition: xmemory0:256
Definition: xmemory0:254
template<class _Ty >
auto _Const_cast ( _Ty *  _Ptr)
inline
314  { // remove constness from a plain pointer
315  return (const_cast<remove_const_t<_Ty> *>(_Ptr));
316  }
typename remove_const< _Ty >::type remove_const_t
Definition: type_traits:2042
template<class _Ty , class... _Types>
void _Construct_in_place ( _Ty &  _Obj,
_Types &&...  _Args 
)
inline
148  { // invoke True Placement New to initialize the referenced object with _Args...
149  ::new (const_cast<void *>(static_cast<const volatile void *>(_STD addressof(_Obj))))
150  _Ty(_STD forward<_Types>(_Args)...);
151  }
_STD_BEGIN constexpr _Ty * addressof(_Ty &_Val) _NOEXCEPT
Definition: xstddef:628
constexpr _Ty && forward(typename remove_reference< _Ty >::type &_Arg) _NOEXCEPT
Definition: type_traits:1332
void _Deallocate ( void _Ptr,
size_t  _Count,
size_t  _Sz 
)
inline
96  { // deallocate storage for _Count elements of size _Sz
97  #if defined(_M_IX86) || defined(_M_X64)
98  _SCL_SECURE_ALWAYS_VALIDATE(_Count <= (size_t)(-1) / _Sz);
99  const size_t _User_size = _Count * _Sz;
100  if (_BIG_ALLOCATION_THRESHOLD <= _User_size)
101  { // deallocate large block
102  const uintptr_t _Ptr_user = reinterpret_cast<uintptr_t>(_Ptr);
104  (_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT - 1)) == 0);
105  const uintptr_t _Ptr_ptr = _Ptr_user - sizeof(void *);
106  const uintptr_t _Ptr_container =
107  *reinterpret_cast<uintptr_t *>(_Ptr_ptr);
108 
109  #ifdef _DEBUG
110  // If the following asserts, it likely means that we are performing
111  // an aligned delete on memory coming from an unaligned allocation.
113  reinterpret_cast<uintptr_t *>(_Ptr_ptr)[-1] ==
114  _BIG_ALLOCATION_SENTINEL);
115  #endif /* _DEBUG */
116 
117  // Extra paranoia on aligned allocation/deallocation
118  _SCL_SECURE_ALWAYS_VALIDATE(_Ptr_container < _Ptr_user);
119 
120  #ifdef _DEBUG
121  _SCL_SECURE_ALWAYS_VALIDATE(2 * sizeof(void *)
122  <= _Ptr_user - _Ptr_container);
123 
124  #else /* _DEBUG */
125  _SCL_SECURE_ALWAYS_VALIDATE(sizeof(void *)
126  <= _Ptr_user - _Ptr_container);
127  #endif /* _DEBUG */
128 
129  _SCL_SECURE_ALWAYS_VALIDATE(_Ptr_user - _Ptr_container
130  <= _NON_USER_SIZE);
131 
132  _Ptr = reinterpret_cast<void *>(_Ptr_container);
133  }
134 
135  #else /* defined(_M_IX86) || defined(_M_X64) */
136  static_cast<void>(_Count);
137  static_cast<void>(_Sz);
138  #endif /* defined(_M_IX86) || defined(_M_X64) */
139 
140  ::operator delete(_Ptr);
141  }
#define _BIG_ALLOCATION_THRESHOLD
Definition: xmemory0:26
#define _BIG_ALLOCATION_ALIGNMENT
Definition: xmemory0:27
unsigned int uintptr_t
Definition: vadefs.h:30
_Diff _Count
Definition: algorithm:1941
#define _SCL_SECURE_ALWAYS_VALIDATE(cond)
Definition: yvals.h:382
#define _NON_USER_SIZE
Definition: xmemory0:33
template<class _Ty >
void _Destroy_in_place ( _Ty &  _Obj)
inline
297  { // destroy the referenced object
298  _Obj.~_Ty();
299  }
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range ( _Ptr  _First,
_Ptr  _Last,
_Wrap_alloc< _Alloc > &  _Al 
)
inline
1214  { // destroy [_First, _Last), choose optimization
1215  // note that this is an optimization for debug mode codegen;
1216  // in release mode the BE removes all of this
1217  typedef typename _Alloc::value_type _Val;
1218  _Destroy_range1(_First, _Last, _Al, _Conjunction_t<
1221  }
Definition: type_traits:1159
void _Destroy_range1(_Ptr _First, _Ptr _Last, _Wrap_alloc< _Alloc > &_Al, false_type)
Definition: xmemory0:1198
Definition: type_traits:696
typename conjunction< _Traits...>::type _Conjunction_t
Definition: type_traits:1118
_FwdIt const _Ty _Val
Definition: algorithm:1938
_FwdIt _Last
Definition: algorithm:1936
template<class _FwdIt >
void _Destroy_range ( _FwdIt  _First,
_FwdIt  _Last 
)
inline
1240  { // destroy [_First, _Last), choose optimization
1241  // note that this is an optimization for debug mode codegen;
1242  // in release mode the BE removes all of this
1244  }
void _Destroy_range1(_Ptr _First, _Ptr _Last, _Wrap_alloc< _Alloc > &_Al, false_type)
Definition: xmemory0:1198
Definition: type_traits:696
typename iterator_traits< _Iter >::value_type _Iter_value_t
Definition: xutility:649
_FwdIt _Last
Definition: algorithm:1936
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range1 ( _Ptr  _First,
_Ptr  _Last,
_Wrap_alloc< _Alloc > &  _Al,
false_type   
)
inline
1199  { // destroy [_First, _Last), no special optimization
1200  for (; _First != _Last; ++_First)
1201  _Al.destroy(_Unfancy(_First));
1202  }
void destroy(_Ty *_Ptr)
Definition: xmemory0:1101
auto _Unfancy(_Ptrty _Ptr)
Definition: xstddef:635
_FwdIt _Last
Definition: algorithm:1936
template<class _Alloc , class _Ptr = typename _Wrap_alloc<_Alloc>::pointer>
void _Destroy_range1 ( _Ptr  ,
_Ptr  ,
_Wrap_alloc< _Alloc > &  ,
true_type   
)
inline
1207  { // destroy [_First, _Last), trivially destructible and default destroy
1208  // nothing to do
1209  }
template<class _FwdIt >
void _Destroy_range1 ( _FwdIt  _First,
_FwdIt  _Last,
false_type   
)
inline
1227  { // destroy [_First, _Last), no special optimization
1228  for (; _First != _Last; ++_First)
1229  _Destroy_in_place(*_First);
1230  }
void _Destroy_in_place(_Ty &_Obj) _NOEXCEPT
Definition: xmemory0:296
_FwdIt _Last
Definition: algorithm:1936
template<class _FwdIt >
void _Destroy_range1 ( _FwdIt  ,
_FwdIt  ,
true_type   
)
inline
1234  { // destroy [_First, _Last), trivially destructible
1235  // nothing to do
1236  }
template<class _Alty >
void _Pocca ( _Alty &  _Left,
const _Alty &  _Right,
true_type   
)
inline
1132  { // propagate on container copy assignment
1133  _Left = _Right;
1134  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocca ( _Alty &  ,
const _Alty &  ,
false_type   
)
inline
1138  { // (don't) propagate on container copy assignment
1139  }
template<class _Alty >
void _Pocca ( _Alty &  _Left,
const _Alty &  _Right 
)
inline
1143  { // (maybe) propagate on container copy assignment
1144  typename _Alty::propagate_on_container_copy_assignment _Tag;
1145  _Pocca(_Left, _Right, _Tag);
1146  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
void _Pocca(_Alty &_Left, const _Alty &_Right, true_type) _NOEXCEPT
Definition: xmemory0:1131
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocma ( _Alty &  _Left,
_Alty &  _Right,
true_type   
)
inline
1151  { // propagate on container move assignment
1152  _Left = _STD move(_Right);
1153  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1349
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocma ( _Alty &  ,
_Alty &  ,
false_type   
)
inline
1157  { // (don't) propagate on container move assignment
1158  }
template<class _Alty >
void _Pocma ( _Alty &  _Left,
_Alty &  _Right 
)
inline
1162  { // (maybe) propagate on container move assignment
1163  typename _Alty::propagate_on_container_move_assignment _Tag;
1164  _Pocma(_Left, _Right, _Tag);
1165  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
void _Pocma(_Alty &_Left, _Alty &_Right, true_type) _NOEXCEPT
Definition: xmemory0:1150
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocs ( _Alty &  _Left,
_Alty &  _Right,
true_type   
)
inline
1170  { // propagate on container swap
1172  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
void _Swap_adl(_Ty &_Left, _Ty &_Right) _NOEXCEPT_OP(_Is_nothrow_swappable< _Ty >
Definition: utility:73
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocs ( _Alty &  _Left,
_Alty &  _Right,
false_type   
)
inline
1176  { // (don't) propagate on container swap
1177  if (_Left != _Right)
1178  { // containers are incompatible
1179  #if _ITERATOR_DEBUG_LEVEL == 2
1180  _DEBUG_ERROR("containers incompatible for swap");
1181  #else /* ITERATOR_DEBUG_LEVEL == 2 */
1182  _STD terminate();
1183  #endif /* ITERATOR_DEBUG_LEVEL == 2 */
1184  }
1185  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
void __CRTDECL terminate() _NOEXCEPT
Definition: exception:208
#define _DEBUG_ERROR(mesg)
Definition: xutility:33
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Alty >
void _Pocs ( _Alty &  _Left,
_Alty &  _Right 
)
inline
1189  { // (maybe) propagate on container swap
1190  typename _Alty::propagate_on_container_swap _Tag;
1191  _Pocs(_Left, _Right, _Tag);
1192  }
constexpr const _Ty &() _Left
Definition: algorithm:3722
void _Pocs(_Alty &_Left, _Alty &_Right, true_type) _NOEXCEPT
Definition: xmemory0:1169
constexpr const _Ty &() _Right
Definition: algorithm:3723
template<class _Ty , class _Other >
bool operator!= ( const allocator< _Ty > &  ,
const allocator< _Other > &   
)
inline
905  { // test for allocator inequality
906  return (false);
907  }
template<class _Ty , class _Other >
bool operator!= ( const _Wrap_alloc< _Ty > &  _Left,
const _Wrap_alloc< _Other > &  _Right 
)
inline
1125  { // test for allocator inequality
1126  return (!(_Left == _Right));
1127  }
template<class _Ty , class _Other >
bool operator== ( const allocator< _Ty > &  ,
const allocator< _Other > &   
)
inline
897  { // test for allocator equality
898  return (true);
899  }
template<class _Ty , class _Other >
bool operator== ( const _Wrap_alloc< _Ty > &  _Left,
const _Wrap_alloc< _Other > &  _Right 
)
inline
1116  { // test for allocator equality
1117  return (static_cast<const _Ty&>(_Left)
1118  == static_cast<const _Other&>(_Right));
1119  }