STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Macros | Typedefs | Enumerations | Functions
memory File Reference
#include <xmemory>
#include <exception>
#include <typeinfo>
#include <type_traits>

Classes

struct  default_delete< _Ty >
 
class  unique_ptr< _Ty, _Dx >
 
class  bad_weak_ptr
 
class  _Ref_count_base
 
class  _Ref_count< _Ty >
 
class  _Ref_count_del< _Ty, _Dx >
 
class  _Ref_count_del_alloc< _Ty, _Dx, _Alloc >
 
class  weak_ptr< _Ty >
 
class  shared_ptr< _Ty >
 
class  enable_shared_from_this< _Ty >
 
class  _Ptr_base< _Ty >
 
class  shared_ptr< _Ty >
 
class  _Ref_count_obj< _Ty >
 
class  _Ref_count_obj_alloc< _Ty, _Alloc >
 
class  weak_ptr< _Ty >
 
class  enable_shared_from_this< _Ty >
 
struct  default_delete< _Ty >
 
struct  default_delete< _Ty[]>
 
class  _Unique_ptr_base< _Ty, _Dx >
 
class  unique_ptr< _Ty, _Dx >
 
class  unique_ptr< _Ty[], _Dx >
 
struct  owner_less< _Ty >
 
struct  owner_less< shared_ptr< _Ty > >
 
struct  owner_less< weak_ptr< _Ty > >
 
struct  owner_less< void >
 
struct  hash< unique_ptr< _Ty, _Dx > >
 
struct  hash< shared_ptr< _Ty > >
 
struct  _Shared_ptr_spin_lock
 

Macros

#define _MEMORY_
 
#define _XSTD2
 

Typedefs

typedef pointer_safety _Pointer_safety
 

Enumerations

enum  pointer_safety { pointer_safety::relaxed, pointer_safety::preferred, pointer_safety::strict }
 

Functions

template<class _Ty1 , class _Ty2 >
void _Do_enable (_Ty1 *, enable_shared_from_this< _Ty2 > *, _Ref_count_base *)
 
template<class _Ty >
void _Enable_shared (_Ty *_Ptr, _Ref_count_base *_Refptr, typename _Ty::_EStype *=0)
 
void _Enable_shared (const volatile void *, const volatile void *)
 
template<class _Ty1 , class _Ty2 >
bool operator== (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
bool operator!= (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
bool operator< (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
bool operator>= (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
bool operator> (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
bool operator<= (const shared_ptr< _Ty1 > &_Left, const shared_ptr< _Ty2 > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator== (const shared_ptr< _Ty > &_Left, nullptr_t) _NOEXCEPT
 
template<class _Ty >
bool operator== (nullptr_t, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator!= (const shared_ptr< _Ty > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty >
bool operator!= (nullptr_t _Left, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator< (const shared_ptr< _Ty > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty >
bool operator< (nullptr_t _Left, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator>= (const shared_ptr< _Ty > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty >
bool operator>= (nullptr_t _Left, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator> (const shared_ptr< _Ty > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty >
bool operator> (nullptr_t _Left, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty >
bool operator<= (const shared_ptr< _Ty > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty >
bool operator<= (nullptr_t _Left, const shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Elem , class _Traits , class _Ty >
basic_ostream< _Elem, _Traits > & operator<< (basic_ostream< _Elem, _Traits > &_Out, const shared_ptr< _Ty > &_Px)
 
template<class _Ty >
void swap (shared_ptr< _Ty > &_Left, shared_ptr< _Ty > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
shared_ptr< _Ty1 > static_pointer_cast (const shared_ptr< _Ty2 > &_Other) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
shared_ptr< _Ty1 > const_pointer_cast (const shared_ptr< _Ty2 > &_Other) _NOEXCEPT
 
template<class _Ty1 , class _Ty2 >
shared_ptr< _Ty1 > dynamic_pointer_cast (const shared_ptr< _Ty2 > &_Other) _NOEXCEPT
 
template<class _Dx , class _Ty >
_Dx * get_deleter (const shared_ptr< _Ty > &_Sx) _NOEXCEPT
 
template<class _Ty , class... _Types>
shared_ptr< _Ty > make_shared (_Types &&..._Args)
 
template<class _Ty , class _Alloc , class... _Types>
shared_ptr< _Ty > allocate_shared (const _Alloc &_Al_arg, _Types &&..._Args)
 
template<class _Ty >
void swap (weak_ptr< _Ty > &_W1, weak_ptr< _Ty > &_W2) _NOEXCEPT
 
template<class _Val , class _Ty >
struct _Get_deleter_pointer_type _GET_TYPE_OR_DEFAULT (pointer, _Val *)
 
template<class _Ty , class... _Types>
enable_if<!is_array< _Ty >::value, unique_ptr< _Ty > >::type make_unique (_Types &&..._Args)
 
template<class _Ty >
enable_if< is_array< _Ty >::value &&extent< _Ty >::value==0, unique_ptr< _Ty > >::type make_unique (size_t _Size)
 
template<class _Ty , class... _Types>
enable_if< extent< _Ty >::value!=0, void >::type make_unique (_Types &&...)=delete
 
template<class _Ty , class _Dx , class = enable_if_t<_Is_swappable<_Dx>::value>>
void swap (unique_ptr< _Ty, _Dx > &_Left, unique_ptr< _Ty, _Dx > &_Right) _NOEXCEPT
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator== (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator!= (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator< (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator>= (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator> (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator<= (const unique_ptr< _Ty1, _Dx1 > &_Left, const unique_ptr< _Ty2, _Dx2 > &_Right)
 
template<class _Ty , class _Dx >
bool operator== (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t) _NOEXCEPT
 
template<class _Ty , class _Dx >
bool operator== (nullptr_t, const unique_ptr< _Ty, _Dx > &_Right) _NOEXCEPT
 
template<class _Ty , class _Dx >
bool operator!= (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t _Right) _NOEXCEPT
 
template<class _Ty , class _Dx >
bool operator!= (nullptr_t _Left, const unique_ptr< _Ty, _Dx > &_Right) _NOEXCEPT
 
template<class _Ty , class _Dx >
bool operator< (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t _Right)
 
template<class _Ty , class _Dx >
bool operator< (nullptr_t _Left, const unique_ptr< _Ty, _Dx > &_Right)
 
template<class _Ty , class _Dx >
bool operator>= (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t _Right)
 
template<class _Ty , class _Dx >
bool operator>= (nullptr_t _Left, const unique_ptr< _Ty, _Dx > &_Right)
 
template<class _Ty , class _Dx >
bool operator> (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t _Right)
 
template<class _Ty , class _Dx >
bool operator> (nullptr_t _Left, const unique_ptr< _Ty, _Dx > &_Right)
 
template<class _Ty , class _Dx >
bool operator<= (const unique_ptr< _Ty, _Dx > &_Left, nullptr_t _Right)
 
template<class _Ty , class _Dx >
bool operator<= (nullptr_t _Left, const unique_ptr< _Ty, _Dx > &_Right)
 
void declare_reachable (void *)
 
template<class _Ty >
_Ty * undeclare_reachable (_Ty *_Ptr)
 
void declare_no_pointers (char *, size_t)
 
void undeclare_no_pointers (char *, size_t)
 
_Pointer_safety get_pointer_safety () _NOEXCEPT
 
voidalign (size_t _Bound, size_t _Size, void *&_Ptr, size_t &_Space) _NOEXCEPT
 
template<class _Ty >
bool atomic_is_lock_free (const shared_ptr< _Ty > *)
 
template<class _Ty >
shared_ptr< _Ty > atomic_load_explicit (const shared_ptr< _Ty > *_Ptr, memory_order)
 
template<class _Ty >
shared_ptr< _Ty > atomic_load (const shared_ptr< _Ty > *_Ptr)
 
template<class _Ty >
void atomic_store_explicit (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
 
template<class _Ty >
void atomic_store (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other)
 
template<class _Ty >
shared_ptr< _Ty > atomic_exchange_explicit (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
 
template<class _Ty >
shared_ptr< _Ty > atomic_exchange (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other)
 
template<class _Ty >
bool atomic_compare_exchange_weak_explicit (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
 
template<class _Ty >
bool atomic_compare_exchange_weak (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value)
 
template<class _Ty >
bool atomic_compare_exchange_strong_explicit (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
 
template<class _Ty >
bool atomic_compare_exchange_strong (shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value)
 

Macro Definition Documentation

#define _MEMORY_
#define _XSTD2

Typedef Documentation

Enumeration Type Documentation

enum pointer_safety
strong
Enumerator
relaxed 
preferred 
strict 
1820  { // return codes for get_pointer_safety
1821  relaxed,
1822  preferred,
1823  strict
1824  };

Function Documentation

template<class _Ty1 , class _Ty2 >
void _Do_enable ( _Ty1 *  _Ptr,
enable_shared_from_this< _Ty2 > *  _Es,
_Ref_count_base _Refptr 
)
inline
1170  { // reset internal weak pointer
1171  _Es->_Wptr._Resetw(_Ptr, _Refptr);
1172  }
weak_ptr< _Ty > _Wptr
Definition: memory:1161
template<class _Ty >
void _Enable_shared ( _Ty *  _Ptr,
_Ref_count_base _Refptr,
typename _Ty::_EStype *  = 0 
)
inline
254  { // reset internal weak pointer
255  if (_Ptr)
256  _Do_enable(_Ptr,
258  }
void _Do_enable(_Ty1 *, enable_shared_from_this< _Ty2 > *, _Ref_count_base *)
Definition: memory:1166
Definition: memory:244
void _Enable_shared ( const volatile void ,
const volatile void  
)
inline
261  { // not derived from enable_shared_from_this; do nothing
262  }
template<class _Val , class _Ty >
struct _Get_deleter_pointer_type _GET_TYPE_OR_DEFAULT ( pointer  ,
_Val  
)
void* align ( size_t  _Bound,
size_t  _Size,
void *&  _Ptr,
size_t _Space 
)
inline
1987  { // try to carve out _Size bytes on boundary _Bound
1988  size_t _Off = (size_t)((uintptr_t)_Ptr & (_Bound - 1));
1989  if (0 < _Off)
1990  _Off = _Bound - _Off; // number of bytes to skip
1991  if (_Space < _Off || _Space - _Off < _Size)
1992  return (0);
1993  else
1994  { // enough room, update
1995  _Ptr = (char *)_Ptr + _Off;
1996  _Space -= _Off;
1997  return (_Ptr);
1998  }
1999  }
unsigned int uintptr_t
Definition: vadefs.h:30
unsigned int size_t
Definition: sourceannotations.h:19
_Size
Definition: vcruntime_string.h:36
template<class _Ty , class _Alloc , class... _Types>
shared_ptr<_Ty> allocate_shared ( const _Alloc &  _Al_arg,
_Types &&...  _Args 
)
inline
984  { // make a shared_ptr
985  typedef _Ref_count_obj_alloc<_Ty, _Alloc> _Refoa;
986  typedef _Wrap_alloc<_Alloc> _Alref0;
987  typename _Alref0::template rebind<_Refoa>::other _Alref(_Al_arg);
988 
989  _Refoa *_Rx = _Alref.allocate(1);
990 
991  _TRY_BEGIN
992  _Alref.construct(_Rx, _Al_arg, _STD forward<_Types>(_Args)...);
993  _CATCH_ALL
994  _Alref.deallocate(_Rx, 1);
995  _RERAISE;
996  _CATCH_END
997 
998  shared_ptr<_Ty> _Ret;
999  _Ret._Resetp0(_Rx->_Getptr(), _Rx);
1000  return (_Ret);
1001  }
Definition: memory:927
#define _TRY_BEGIN
Definition: xstddef:60
#define _CATCH_END
Definition: xstddef:63
void _Resetp0(_Ux *_Px, _Ref_count_base *_Rx)
Definition: memory:693
Definition: memory:242
#define _CATCH_ALL
Definition: xstddef:62
Definition: xmemory0:380
#define _RERAISE
Definition: xstddef:74
template<class _Ty >
bool atomic_compare_exchange_strong ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty > *  _Exp,
shared_ptr< _Ty >  _Value 
)
inline
2109  { // atomically compare and exchange
2110  return (_STD atomic_compare_exchange_strong_explicit(_Ptr, _Exp, _STD move(_Value),
2112  }
bool atomic_compare_exchange_strong_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2097
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
Definition: xatomic0.h:21
template<class _Ty >
bool atomic_compare_exchange_strong_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty > *  _Exp,
shared_ptr< _Ty >  _Value,
memory_order  ,
memory_order   
)
inline
2100  { // atomically compare and exchange
2101  return (_STD atomic_compare_exchange_weak_explicit(_Ptr, _Exp, _STD move(_Value),
2103  }
bool atomic_compare_exchange_weak_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2068
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
Definition: xatomic0.h:21
template<class _Ty >
bool atomic_compare_exchange_weak ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty > *  _Exp,
shared_ptr< _Ty >  _Value 
)
inline
2091  { // atomically compare and exchange
2092  return (_STD atomic_compare_exchange_weak_explicit(_Ptr, _Exp, _STD move(_Value),
2094  }
bool atomic_compare_exchange_weak_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2068
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
Definition: xatomic0.h:21
template<class _Ty >
bool atomic_compare_exchange_weak_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty > *  _Exp,
shared_ptr< _Ty >  _Value,
memory_order  ,
memory_order   
)
inline
2071  { // atomically compare and exchange
2072  shared_ptr<_Ty> _Old_exp; // destroyed outside spin lock
2073  _Shared_ptr_spin_lock _Lock;
2074  bool _Success = _Ptr->get() == _Exp->get()
2075  && !_Ptr->owner_before(*_Exp)
2076  && !_Exp->owner_before(*_Ptr);
2077  if (_Success)
2078  _Ptr->swap(_Value);
2079  else
2080  { // match failed
2081  _Exp->swap(_Old_exp);
2082  *_Exp = *_Ptr;
2083  }
2084  return (_Success);
2085  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:618
bool owner_before(const _Ptr_base< _Ty2 > &_Right) const
Definition: memory:315
Definition: memory:2002
Definition: memory:242
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty >
shared_ptr<_Ty> atomic_exchange ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other 
)
inline
2063  { // copy _Other to *_Ptr and return previous value of *_Ptr atomically
2064  return (_STD atomic_exchange_explicit(_Ptr, _STD move(_Other), memory_order_seq_cst));
2065  }
shared_ptr< _Ty > atomic_exchange_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
Definition: memory:2051
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
Definition: xatomic0.h:21
template<class _Ty >
shared_ptr<_Ty> atomic_exchange_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other,
memory_order   
)
inline
2054  { // copy _Other to *_Ptr and return previous value of *_Ptr atomically
2055  _Shared_ptr_spin_lock _Lock;
2056  _Ptr->swap(_Other);
2057  return (_Other);
2058  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:618
Definition: memory:2002
template<class _Ty >
bool atomic_is_lock_free ( const shared_ptr< _Ty > *  )
inline
2017  { // return true if atomic operations on shared_ptr<_Ty> are lock-free
2018  return (false);
2019  }
template<class _Ty >
shared_ptr<_Ty> atomic_load ( const shared_ptr< _Ty > *  _Ptr)
inline
2032  { // load *_Ptr atomically
2034  }
shared_ptr< _Ty > atomic_load_explicit(const shared_ptr< _Ty > *_Ptr, memory_order)
Definition: memory:2022
Definition: xatomic0.h:21
template<class _Ty >
shared_ptr<_Ty> atomic_load_explicit ( const shared_ptr< _Ty > *  _Ptr,
memory_order   
)
inline
2024  { // load *_Ptr atomically
2025  _Shared_ptr_spin_lock _Lock;
2026  shared_ptr<_Ty> _Result = *_Ptr;
2027  return (_Result);
2028  }
Definition: memory:2002
Definition: memory:242
template<class _Ty >
void atomic_store ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other 
)
inline
2046  { // store _Other to *_Ptr atomically
2048  }
void atomic_store_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
Definition: memory:2037
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
Definition: xatomic0.h:21
template<class _Ty >
void atomic_store_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other,
memory_order   
)
inline
2039  { // store _Other to *_Ptr atomically
2040  _Shared_ptr_spin_lock _Lock;
2041  _Ptr->swap(_Other);
2042  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:618
Definition: memory:2002
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> const_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
865  { // return shared_ptr object holding const_cast<_Ty1 *>(_Other.get())
866  typedef typename shared_ptr<_Ty1>::element_type _Elem1;
867  _Elem1 *_Ptr = const_cast<_Elem1 *>(_Other.get());
868  return (shared_ptr<_Ty1>(_Other, _Ptr));
869  }
_Ty element_type
Definition: memory:270
Definition: memory:242
_Ty * get() const _NOEXCEPT
Definition: memory:623
void declare_no_pointers ( char *  ,
size_t   
)
inline
1839  { // declare region to be pointer free
1840  }
void declare_reachable ( void )
inline
1829  { // increment pointer reachable count
1830  }
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> dynamic_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
875  { // return shared_ptr object holding dynamic_cast<_Ty1 *>(_Other.get())
876  typedef typename shared_ptr<_Ty1>::element_type _Elem1;
877  _Elem1 *_Ptr = dynamic_cast<_Elem1 *>(_Other.get());
878  if (_Ptr)
879  return (shared_ptr<_Ty1>(_Other, _Ptr));
880  else
881  return (shared_ptr<_Ty1>());
882  }
_Ty element_type
Definition: memory:270
Definition: memory:242
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Dx , class _Ty >
_Dx* get_deleter ( const shared_ptr< _Ty > &  _Sx)
887  { // return pointer to shared_ptr's deleter object if its type is _Ty
888  return ((_Dx *)_Sx._Get_deleter(typeid(_Dx)));
889  }
void * _Get_deleter(const _XSTD2 type_info &_Typeid) const _NOEXCEPT
Definition: memory:320
_Pointer_safety get_pointer_safety ( )
inline
1847  { // get pointer safety status
1848  return (pointer_safety::relaxed);
1849  }
template<class _Ty , class... _Types>
shared_ptr<_Ty> make_shared ( _Types &&...  _Args)
inline
969  { // make a shared_ptr
970  _Ref_count_obj<_Ty> *_Rx =
971  new _Ref_count_obj<_Ty>(_STD forward<_Types>(_Args)...);
972 
973  shared_ptr<_Ty> _Ret;
974  _Ret._Resetp0(_Rx->_Getptr(), _Rx);
975  return (_Ret);
976  }
void _Resetp0(_Ux *_Px, _Ref_count_base *_Rx)
Definition: memory:693
Definition: memory:242
Definition: memory:893
template<class _Ty , class... _Types>
enable_if<!is_array<_Ty>::value, unique_ptr<_Ty> >::type make_unique ( _Types &&...  _Args)
inline
1629  { // make a unique_ptr
1630  return (unique_ptr<_Ty>(new _Ty(_STD forward<_Types>(_Args)...)));
1631  }
Definition: memory:29
template<class _Ty >
enable_if<is_array<_Ty>::value && extent<_Ty>::value == 0, unique_ptr<_Ty> >::type make_unique ( size_t  _Size)
inline
1636  { // make a unique_ptr
1637  typedef typename remove_extent<_Ty>::type _Elem;
1638  return (unique_ptr<_Ty>(new _Elem[_Size]()));
1639  }
_Ty type
Definition: type_traits:128
Definition: memory:29
_Size
Definition: vcruntime_string.h:36
template<class _Ty , class... _Types>
enable_if<extent<_Ty>::value != 0, void>::type make_unique ( _Types &&  ...)
delete
template<class _Ty1 , class _Ty2 >
bool operator!= ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
712  { // test if shared_ptr != shared_ptr
713  return (!(_Left == _Right));
714  }
template<class _Ty >
bool operator!= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
767  { // test if shared_ptr != nullptr
768  return (!(_Left == _Right));
769  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty >
bool operator!= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
774  { // test if nullptr != shared_ptr
775  return (!(_Left == _Right));
776  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator!= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1672  { // test if unique_ptr _Left doesn't equal _Right
1673  return (!(_Left == _Right));
1674  }
template<class _Ty , class _Dx >
bool operator!= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1740  { // test if unique_ptr != nullptr
1741  return (!(_Left == _Right));
1742  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty , class _Dx >
bool operator!= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1748  { // test if nullptr != unique_ptr
1749  return (!(_Left == _Right));
1750  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Ty2 >
bool operator< ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
720  { // test if shared_ptr < shared_ptr
721  return (less<decltype(_Always_false<_Ty1>::value
722  ? _Left.get() : _Right.get())>()(
723  _Left.get(), _Right.get()));
724  }
Definition: xstddef:231
_Ty * get() const _NOEXCEPT
Definition: memory:623
Definition: xstddef:144
template<class _Ty >
bool operator< ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
781  { // test if shared_ptr < nullptr
782  return (less<_Ty *>()(_Left.get(), (_Ty *)0));
783  }
Definition: xstddef:231
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty >
bool operator< ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
788  { // test if nullptr < shared_ptr
789  return (less<_Ty *>()((_Ty *)0, _Right.get()));
790  }
Definition: xstddef:231
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator< ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1682  { // test if unique_ptr _Left precedes _Right
1683  typedef typename unique_ptr<_Ty1, _Dx1>::pointer _Ptr1;
1684  typedef typename unique_ptr<_Ty2, _Dx2>::pointer _Ptr2;
1685  typedef typename common_type<_Ptr1, _Ptr2>::type _Common;
1686  return (less<_Common>()(_Left.get(), _Right.get()));
1687 
1688  }
Definition: xstddef:231
pointer get() const _NOEXCEPT
Definition: memory:1410
_Mybase::pointer pointer
Definition: memory:1283
Definition: type_traits:1159
template<class _Ty , class _Dx >
bool operator< ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1756  { // test if unique_ptr < nullptr
1757  typedef typename unique_ptr<_Ty, _Dx>::pointer _Ptr;
1758  return (less<_Ptr>()(_Left.get(), _Right));
1759  }
Definition: xstddef:231
pointer get() const _NOEXCEPT
Definition: memory:1410
_Mybase::pointer pointer
Definition: memory:1283
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty , class _Dx >
bool operator< ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1765  { // test if nullptr < unique_ptr
1766  typedef typename unique_ptr<_Ty, _Dx>::pointer _Ptr;
1767  return (less<_Ptr>()(_Left, _Right.get()));
1768  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
Definition: xstddef:231
pointer get() const _NOEXCEPT
Definition: memory:1410
_Mybase::pointer pointer
Definition: memory:1283
template<class _Elem , class _Traits , class _Ty >
basic_ostream<_Elem, _Traits>& operator<< ( basic_ostream< _Elem, _Traits > &  _Out,
const shared_ptr< _Ty > &  _Px 
)
840  { // write contained pointer to stream
841  return (_Out << _Px.get());
842  }
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty1 , class _Ty2 >
bool operator<= ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
746  { // test if shared_ptr <= shared_ptr
747  return (!(_Right < _Left));
748  }
template<class _Ty >
bool operator<= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
823  { // test if shared_ptr <= nullptr
824  return (!(_Right < _Left));
825  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty >
bool operator<= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
830  { // test if nullptr <= shared_ptr
831  return (!(_Right < _Left));
832  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator<= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1716  { // test if unique_ptr _Right doesn't precede _Left
1717  return (!(_Right < _Left));
1718  }
template<class _Ty , class _Dx >
bool operator<= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1806  { // test if unique_ptr <= nullptr
1807  return (!(_Right < _Left));
1808  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty , class _Dx >
bool operator<= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1814  { // test if nullptr <= unique_ptr
1815  return (!(_Right < _Left));
1816  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Ty2 >
bool operator== ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
704  { // test if shared_ptr == shared_ptr
705  return (_Left.get() == _Right.get());
706  }
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty >
bool operator== ( const shared_ptr< _Ty > &  _Left,
nullptr_t   
)
753  { // test if shared_ptr == nullptr
754  return (_Left.get() == (_Ty *)0);
755  }
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty >
bool operator== ( nullptr_t  ,
const shared_ptr< _Ty > &  _Right 
)
760  { // test if nullptr == shared_ptr
761  return ((_Ty *)0 == _Right.get());
762  }
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator== ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1662  { // test if unique_ptr _Left equals _Right
1663  return (_Left.get() == _Right.get());
1664  }
pointer get() const _NOEXCEPT
Definition: memory:1410
template<class _Ty , class _Dx >
bool operator== ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t   
)
1724  { // test if unique_ptr == nullptr
1725  return (!_Left);
1726  }
template<class _Ty , class _Dx >
bool operator== ( nullptr_t  ,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1732  { // test if nullptr == unique_ptr
1733  return (!_Right);
1734  }
template<class _Ty1 , class _Ty2 >
bool operator> ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
738  { // test if shared_ptr > shared_ptr
739  return (_Right < _Left);
740  }
template<class _Ty >
bool operator> ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
809  { // test if shared_ptr > nullptr
810  return (_Right < _Left);
811  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty >
bool operator> ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
816  { // test if nullptr > shared_ptr
817  return (_Right < _Left);
818  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator> ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1706  { // test if unique_ptr _Right precedes _Left
1707  return (_Right < _Left);
1708  }
template<class _Ty , class _Dx >
bool operator> ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1790  { // test if unique_ptr > nullptr
1791  return (_Right < _Left);
1792  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty , class _Dx >
bool operator> ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1798  { // test if nullptr > unique_ptr
1799  return (_Right < _Left);
1800  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Ty2 >
bool operator>= ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
730  { // shared_ptr >= shared_ptr
731  return (!(_Left < _Right));
732  }
template<class _Ty >
bool operator>= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
795  { // test if shared_ptr >= nullptr
796  return (!(_Left < _Right));
797  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty >
bool operator>= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
802  { // test if nullptr >= shared_ptr
803  return (!(_Left < _Right));
804  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator>= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1696  { // test if unique_ptr _Left doesn't precede _Right
1697  return (!(_Left < _Right));
1698  }
template<class _Ty , class _Dx >
bool operator>= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1774  { // test if unique_ptr >= nullptr
1775  return (!(_Left < _Right));
1776  }
constexpr const _Ty &() _Right
Definition: algorithm:3591
template<class _Ty , class _Dx >
bool operator>= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1782  { // test if nullptr >= unique_ptr
1783  return (!(_Left < _Right));
1784  }
constexpr const _Ty &() _Left
Definition: algorithm:3590
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> static_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
855  { // return shared_ptr object holding static_cast<_Ty1 *>(_Other.get())
856  typedef typename shared_ptr<_Ty1>::element_type _Elem1;
857  _Elem1 *_Ptr = static_cast<_Elem1 *>(_Other.get());
858  return (shared_ptr<_Ty1>(_Other, _Ptr));
859  }
_Ty element_type
Definition: memory:270
Definition: memory:242
_Ty * get() const _NOEXCEPT
Definition: memory:623
template<class _Ty >
void swap ( shared_ptr< _Ty > &  _Left,
shared_ptr< _Ty > &  _Right 
)
847  { // swap _Left and _Right shared_ptrs
848  _Left.swap(_Right);
849  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:618
template<class _Ty >
void swap ( weak_ptr< _Ty > &  _W1,
weak_ptr< _Ty > &  _W2 
)
1113  { // swap contents of _W1 and _W2
1114  _W1.swap(_W2);
1115  }
void swap(weak_ptr &_Other) _NOEXCEPT
Definition: memory:1095
template<class _Ty , class _Dx , class = enable_if_t<_Is_swappable<_Dx>::value>>
void swap ( unique_ptr< _Ty, _Dx > &  _Left,
unique_ptr< _Ty, _Dx > &  _Right 
)
1652  { // swap _Left with _Right
1653  _Left.swap(_Right);
1654  }
void swap(_Myt &_Right) _NOEXCEPT
Definition: memory:1387
void undeclare_no_pointers ( char *  ,
size_t   
)
inline
1843  { // undeclare region to be pointer free
1844  }
template<class _Ty >
_Ty* undeclare_reachable ( _Ty *  _Ptr)
inline
1834  { // decrement pointer reachable count
1835  return (_Ptr);
1836  }