STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions
memory File Reference
#include <xmemory>
#include <stdint.h>
#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 >
 
struct  _Static_tag
 
struct  _Const_tag
 
struct  _Dynamic_tag
 
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, _Empty_deleter >
 
class  _Unique_ptr_base< _Ty, _Dx, true >
 
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  hash< unique_ptr< _Ty, _Dx > >
 
struct  hash< shared_ptr< _Ty > >
 
struct  _Shared_ptr_spin_lock
 

Namespaces

 tr1
 

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 >
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 
1827  { // return codes for get_pointer_safety
1828  relaxed,
1829  preferred,
1830  strict
1831  };

Function Documentation

template<class _Ty1 , class _Ty2 >
void _Do_enable ( _Ty1 *  _Ptr,
enable_shared_from_this< _Ty2 > *  _Es,
_Ref_count_base _Refptr 
)
inline
1171  { // reset internal weak pointer
1172  _Es->_Wptr._Resetw(_Ptr, _Refptr);
1173  }
weak_ptr< _Ty > _Wptr
Definition: memory:1162
template<class _Ty >
void _Enable_shared ( _Ty *  _Ptr,
_Ref_count_base _Refptr,
typename _Ty::_EStype *  = 0 
)
inline
259  { // reset internal weak pointer
260  if (_Ptr)
261  _Do_enable(_Ptr,
263  }
void _Do_enable(_Ty1 *, enable_shared_from_this< _Ty2 > *, _Ref_count_base *)
Definition: memory:1167
Definition: memory:247
void _Enable_shared ( const volatile void ,
const volatile void  
)
inline
266  { // not derived from enable_shared_from_this; do nothing
267  }
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
1953  { // try to carve out _Size bytes on boundary _Bound
1954  size_t _Off = (size_t)((uintptr_t)_Ptr & (_Bound - 1));
1955  if (0 < _Off)
1956  _Off = _Bound - _Off; // number of bytes to skip
1957  if (_Space < _Off || _Space - _Off < _Size)
1958  return (0);
1959  else
1960  { // enough room, update
1961  _Ptr = (char *)_Ptr + _Off;
1962  _Space -= _Off;
1963  return (_Ptr);
1964  }
1965  }
_W64 unsigned int size_t
Definition: crtdefs.h:496
_W64 unsigned int uintptr_t
Definition: crtdefs.h:521
_Check_return_ _In_ long _Size
Definition: io.h:325
template<class _Ty , class _Alloc , class... _Types>
shared_ptr<_Ty> allocate_shared ( const _Alloc &  _Al_arg,
_Types &&...  _Args 
)
inline
1016  { // make a shared_ptr
1017  typedef _Ref_count_obj_alloc<_Ty, _Alloc> _Refoa;
1018  typename _Alloc::template rebind<_Refoa>::other _Alref = _Al_arg;
1019 
1020  _Refoa *_Rx = _Alref.allocate(1);
1021 
1022  _TRY_BEGIN
1023  ::new (_Rx) _Refoa(_Al_arg, _STD forward<_Types>(_Args)...);
1024  _CATCH_ALL
1025  _Alref.deallocate(_Rx, 1);
1026  _RERAISE;
1027  _CATCH_END
1028 
1029  shared_ptr<_Ty> _Ret;
1030  _Ret._Resetp0(_Rx->_Getptr(), _Rx);
1031  return (_Ret);
1032  }
Definition: memory:959
#define _CATCH_END
Definition: xstddef:63
Definition: memory:245
#define _CATCH_ALL
Definition: xstddef:62
return(_PAIR_TYPE(_FwdIt)(_First, _First))
#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
2072  { // atomically compare and exchange
2073  return (atomic_compare_exchange_strong_explicit(_Ptr, _Exp, _Value,
2075  }
bool atomic_compare_exchange_strong_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2060
Definition: xatomic0.h:25
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
2063  { // atomically compare and exchange
2064  return (atomic_compare_exchange_weak_explicit(_Ptr, _Exp, _Value,
2066  }
bool atomic_compare_exchange_weak_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2035
Definition: xatomic0.h:25
template<class _Ty >
bool atomic_compare_exchange_weak ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty > *  _Exp,
shared_ptr< _Ty >  _Value 
)
inline
2054  { // atomically compare and exchange
2055  return (atomic_compare_exchange_weak_explicit(_Ptr, _Exp, _Value,
2057  }
bool atomic_compare_exchange_weak_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > *_Exp, shared_ptr< _Ty > _Value, memory_order, memory_order)
Definition: memory:2035
Definition: xatomic0.h:25
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
2038  { // atomically compare and exchange
2039  _Shared_ptr_spin_lock _Lock;
2040  bool _Success = _Ptr->get() == _Exp->get();
2041  if (_Success)
2042  *_Ptr = _Value;
2043  else
2044  { // match failed
2045  *_Exp = *_Ptr;
2046  }
2047  return (_Success);
2048  }
_CRTIMP _In_ int _Value
Definition: setjmp.h:190
Definition: memory:1968
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty >
shared_ptr<_Ty> atomic_exchange ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other 
)
inline
2030  { // copy _Other to *_Ptr and return previous value of *_Ptr atomically
2031  return (atomic_exchange_explicit(_Ptr, _Other, memory_order_seq_cst));
2032  }
shared_ptr< _Ty > atomic_exchange_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
Definition: memory:2017
Definition: xatomic0.h:25
template<class _Ty >
shared_ptr<_Ty> atomic_exchange_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other,
memory_order   
)
inline
2020  { // copy _Other to *_Ptr and return previous value of *_Ptr atomically
2021  _Shared_ptr_spin_lock _Lock;
2022  shared_ptr<_Ty> _Result = *_Ptr;
2023  _Ptr->swap(_Other);
2024  return (_Result);
2025  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:659
Definition: memory:1968
Definition: memory:245
template<class _Ty >
bool atomic_is_lock_free ( const shared_ptr< _Ty > *  )
inline
1983  { // return true if atomic operations on shared_ptr<_Ty> are lock-free
1984  return (false);
1985  }
template<class _Ty >
shared_ptr<_Ty> atomic_load ( const shared_ptr< _Ty > *  _Ptr)
inline
1998  { // load *_Ptr atomically
2000  }
shared_ptr< _Ty > atomic_load_explicit(const shared_ptr< _Ty > *_Ptr, memory_order)
Definition: memory:1988
Definition: xatomic0.h:25
template<class _Ty >
shared_ptr<_Ty> atomic_load_explicit ( const shared_ptr< _Ty > *  _Ptr,
memory_order   
)
inline
1990  { // load *_Ptr atomically
1991  _Shared_ptr_spin_lock _Lock;
1992  shared_ptr<_Ty> _Result = *_Ptr;
1993  return (_Result);
1994  }
Definition: memory:1968
Definition: memory:245
template<class _Ty >
void atomic_store ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other 
)
inline
2012  { // store _Other to *_Ptr atomically
2014  }
void atomic_store_explicit(shared_ptr< _Ty > *_Ptr, shared_ptr< _Ty > _Other, memory_order)
Definition: memory:2003
Definition: xatomic0.h:25
template<class _Ty >
void atomic_store_explicit ( shared_ptr< _Ty > *  _Ptr,
shared_ptr< _Ty >  _Other,
memory_order   
)
inline
2005  { // store _Other to *_Ptr atomically
2006  _Shared_ptr_spin_lock _Lock;
2007  _Ptr->swap(_Other);
2008  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:659
Definition: memory:1968
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> const_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
903  { // return shared_ptr object holding const_cast<_Ty1 *>(_Other.get())
904  return (shared_ptr<_Ty1>(_Other, _Const_tag()));
905  }
Definition: memory:249
Definition: memory:245
void declare_no_pointers ( char *  ,
size_t   
)
inline
1846  { // declare region to be pointer free
1847  }
void declare_reachable ( void )
inline
1836  { // increment pointer reachable count
1837  }
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> dynamic_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
911  { // return shared_ptr object holding dynamic_cast<_Ty1 *>(_Other.get())
912  return (shared_ptr<_Ty1>(_Other, _Dynamic_tag()));
913  }
Definition: memory:250
Definition: memory:245
template<class _Dx , class _Ty >
_Dx* get_deleter ( const shared_ptr< _Ty > &  _Sx)
918  { // return pointer to shared_ptr's deleter object if its type is _Ty
919  return ((_Dx *)_Sx._Get_deleter(typeid(_Dx)));
920  }
void * _Get_deleter(const _XSTD2 type_info &_Typeid) const
Definition: memory:325
_Pointer_safety get_pointer_safety ( )
inline
1854  { // get pointer safety status
1855  return (pointer_safety::relaxed);
1856  }
template<class _Ty , class... _Types>
shared_ptr<_Ty> make_shared ( _Types &&...  _Args)
inline
1001  { // make a shared_ptr
1002  _Ref_count_obj<_Ty> *_Rx =
1003  new _Ref_count_obj<_Ty>(_STD forward<_Types>(_Args)...);
1004 
1005  shared_ptr<_Ty> _Ret;
1006  _Ret._Resetp0(_Rx->_Getptr(), _Rx);
1007  return (_Ret);
1008  }
void _Resetp0(_Ux *_Px, _Ref_count_base *_Rx)
Definition: memory:733
Definition: memory:245
Definition: memory:924
template<class _Ty , class... _Types>
enable_if<!is_array<_Ty>::value, unique_ptr<_Ty> >::type make_unique ( _Types &&...  _Args)
inline
1638  { // make a unique_ptr
1639  return (unique_ptr<_Ty>(new _Ty(_STD forward<_Types>(_Args)...)));
1640  }
Definition: memory:30
template<class _Ty >
enable_if<is_array<_Ty>::value && extent<_Ty>::value == 0, unique_ptr<_Ty> >::type make_unique ( size_t  _Size)
inline
1645  { // make a unique_ptr
1646  typedef typename remove_extent<_Ty>::type _Elem;
1647  return (unique_ptr<_Ty>(new _Elem[_Size]()));
1648  }
_Ty type
Definition: type_traits:228
Definition: memory:30
_Check_return_ _In_ long _Size
Definition: io.h:325
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 
)
752  { // test if shared_ptr != shared_ptr
753  return (!(_Left == _Right));
754  }
template<class _Ty >
bool operator!= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
807  { // test if shared_ptr != nullptr
808  return (!(_Left == _Right));
809  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty >
bool operator!= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
814  { // test if nullptr != shared_ptr
815  return (!(_Left == _Right));
816  }
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator!= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1680  { // test if unique_ptr _Left doesn't equal _Right
1681  return (!(_Left == _Right));
1682  }
template<class _Ty , class _Dx >
bool operator!= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1747  { // test if unique_ptr != nullptr
1748  return (!(_Left == _Right));
1749  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty , class _Dx >
bool operator!= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1755  { // test if nullptr != unique_ptr
1756  return (!(_Left == _Right));
1757  }
template<class _Ty1 , class _Ty2 >
bool operator< ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
760  { // test if shared_ptr < shared_ptr
761  return (less<decltype(_Always_false<_Ty1>::value
762  ? _Left.get() : _Right.get())>()(
763  _Left.get(), _Right.get()));
764  }
Definition: xstddef:188
_Ty * get() const _NOEXCEPT
Definition: memory:664
Definition: xstddef:116
template<class _Ty >
bool operator< ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
821  { // test if shared_ptr < nullptr
822  return (less<_Ty *>()(_Left.get(), (_Ty *)0));
823  }
Definition: xstddef:188
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty >
bool operator< ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
828  { // test if nullptr < shared_ptr
829  return (less<_Ty *>()((_Ty *)0, _Right.get()));
830  }
Definition: xstddef:188
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator< ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1690  { // test if unique_ptr _Left precedes _Right
1691  typedef typename unique_ptr<_Ty1, _Dx1>::pointer _Ptr1;
1692  typedef typename unique_ptr<_Ty2, _Dx2>::pointer _Ptr2;
1693  typedef typename common_type<_Ptr1, _Ptr2>::type _Common;
1694  return (less<_Common>()(_Left.get(), _Right.get()));
1695  }
Definition: xstddef:188
pointer get() const _NOEXCEPT
Definition: memory:1461
_Mybase::pointer pointer
Definition: memory:1337
template<class _Ty , class _Dx >
bool operator< ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1763  { // test if unique_ptr < nullptr
1764  typedef typename unique_ptr<_Ty, _Dx>::pointer _Ptr;
1765  return (less<_Ptr>()(_Left.get(), _Right));
1766  }
Definition: xstddef:188
pointer get() const _NOEXCEPT
Definition: memory:1461
_Mybase::pointer pointer
Definition: memory:1337
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty , class _Dx >
bool operator< ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1772  { // test if nullptr < unique_ptr
1773  typedef typename unique_ptr<_Ty, _Dx>::pointer _Ptr;
1774  return (less<_Ptr>()(_Left, _Right.get()));
1775  }
Definition: xstddef:188
pointer get() const _NOEXCEPT
Definition: memory:1461
_Mybase::pointer pointer
Definition: memory:1337
template<class _Elem , class _Traits , class _Ty >
basic_ostream<_Elem, _Traits>& operator<< ( basic_ostream< _Elem, _Traits > &  _Out,
const shared_ptr< _Ty > &  _Px 
)
880  { // write contained pointer to stream
881  return (_Out << _Px.get());
882  }
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty1 , class _Ty2 >
bool operator<= ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
786  { // test if shared_ptr <= shared_ptr
787  return (!(_Right < _Left));
788  }
template<class _Ty >
bool operator<= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
863  { // test if shared_ptr <= nullptr
864  return (!(_Right < _Left));
865  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty >
bool operator<= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
870  { // test if nullptr <= shared_ptr
871  return (!(_Right < _Left));
872  }
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator<= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1723  { // test if unique_ptr _Right doesn't precede _Left
1724  return (!(_Right < _Left));
1725  }
template<class _Ty , class _Dx >
bool operator<= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1813  { // test if unique_ptr <= nullptr
1814  return (!(_Right < _Left));
1815  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty , class _Dx >
bool operator<= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1821  { // test if nullptr <= unique_ptr
1822  return (!(_Right < _Left));
1823  }
template<class _Ty1 , class _Ty2 >
bool operator== ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
744  { // test if shared_ptr == shared_ptr
745  return (_Left.get() == _Right.get());
746  }
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty >
bool operator== ( const shared_ptr< _Ty > &  _Left,
nullptr_t   
)
793  { // test if shared_ptr == nullptr
794  return (_Left.get() == (_Ty *)0);
795  }
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty >
bool operator== ( nullptr_t  ,
const shared_ptr< _Ty > &  _Right 
)
800  { // test if nullptr == shared_ptr
801  return ((_Ty *)0 == _Right.get());
802  }
_Ty * get() const _NOEXCEPT
Definition: memory:664
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator== ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1670  { // test if unique_ptr _Left equals _Right
1671  return (_Left.get() == _Right.get());
1672  }
pointer get() const _NOEXCEPT
Definition: memory:1461
template<class _Ty , class _Dx >
bool operator== ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t   
)
1731  { // test if unique_ptr == nullptr
1732  return (!_Left);
1733  }
template<class _Ty , class _Dx >
bool operator== ( nullptr_t  ,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1739  { // test if nullptr == unique_ptr
1740  return (!_Right);
1741  }
template<class _Ty1 , class _Ty2 >
bool operator> ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
778  { // test if shared_ptr > shared_ptr
779  return (_Right < _Left);
780  }
template<class _Ty >
bool operator> ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
849  { // test if shared_ptr > nullptr
850  return (_Right < _Left);
851  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty >
bool operator> ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
856  { // test if nullptr > shared_ptr
857  return (_Right < _Left);
858  }
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator> ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1713  { // test if unique_ptr _Right precedes _Left
1714  return (_Right < _Left);
1715  }
template<class _Ty , class _Dx >
bool operator> ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1797  { // test if unique_ptr > nullptr
1798  return (_Right < _Left);
1799  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty , class _Dx >
bool operator> ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1805  { // test if nullptr > unique_ptr
1806  return (_Right < _Left);
1807  }
template<class _Ty1 , class _Ty2 >
bool operator>= ( const shared_ptr< _Ty1 > &  _Left,
const shared_ptr< _Ty2 > &  _Right 
)
770  { // shared_ptr >= shared_ptr
771  return (!(_Left < _Right));
772  }
template<class _Ty >
bool operator>= ( const shared_ptr< _Ty > &  _Left,
nullptr_t  _Right 
)
835  { // test if shared_ptr >= nullptr
836  return (!(_Left < _Right));
837  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty >
bool operator>= ( nullptr_t  _Left,
const shared_ptr< _Ty > &  _Right 
)
842  { // test if nullptr >= shared_ptr
843  return (!(_Left < _Right));
844  }
template<class _Ty1 , class _Dx1 , class _Ty2 , class _Dx2 >
bool operator>= ( const unique_ptr< _Ty1, _Dx1 > &  _Left,
const unique_ptr< _Ty2, _Dx2 > &  _Right 
)
1703  { // test if unique_ptr _Left doesn't precede _Right
1704  return (!(_Left < _Right));
1705  }
template<class _Ty , class _Dx >
bool operator>= ( const unique_ptr< _Ty, _Dx > &  _Left,
nullptr_t  _Right 
)
1781  { // test if unique_ptr >= nullptr
1782  return (!(_Left < _Right));
1783  }
const _Ty & _Right
Definition: algorithm:4087
template<class _Ty , class _Dx >
bool operator>= ( nullptr_t  _Left,
const unique_ptr< _Ty, _Dx > &  _Right 
)
1789  { // test if nullptr >= unique_ptr
1790  return (!(_Left < _Right));
1791  }
template<class _Ty1 , class _Ty2 >
shared_ptr<_Ty1> static_pointer_cast ( const shared_ptr< _Ty2 > &  _Other)
895  { // return shared_ptr object holding static_cast<_Ty1 *>(_Other.get())
896  return (shared_ptr<_Ty1>(_Other, _Static_tag()));
897  }
Definition: memory:245
Definition: memory:248
template<class _Ty >
void swap ( shared_ptr< _Ty > &  _Left,
shared_ptr< _Ty > &  _Right 
)
887  { // swap _Left and _Right shared_ptrs
888  _Left.swap(_Right);
889  }
void swap(_Myt &_Other) _NOEXCEPT
Definition: memory:659
template<class _Ty >
void swap ( weak_ptr< _Ty > &  _W1,
weak_ptr< _Ty > &  _W2 
)
1114  { // swap contents of _W1 and _W2
1115  _W1.swap(_W2);
1116  }
void swap(weak_ptr &_Other) _NOEXCEPT
Definition: memory:1096
template<class _Ty , class _Dx >
void swap ( unique_ptr< _Ty, _Dx > &  _Left,
unique_ptr< _Ty, _Dx > &  _Right 
)
1660  { // swap _Left with _Right
1661  _Left.swap(_Right);
1662  }
void swap(_Myt &_Right) _NOEXCEPT
Definition: memory:1438
void undeclare_no_pointers ( char *  ,
size_t   
)
inline
1850  { // undeclare region to be pointer free
1851  }
template<class _Ty >
_Ty* undeclare_reachable ( _Ty *  _Ptr)
inline
1841  { // decrement pointer reachable count
1842  return (_Ptr);
1843  }