Corrected some bugs in both memory and the tests. Preparing for being able to turn on support for alias templates.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@131199 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5d37fb32d2
commit
6b41c6047b
@ -794,7 +794,7 @@ struct _LIBCPP_VISIBLE pointer_traits
|
|||||||
typedef typename __pointer_traits_difference_type<pointer>::type difference_type;
|
typedef typename __pointer_traits_difference_type<pointer>::type difference_type;
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
||||||
template <class _Up> using rebind = __pointer_traits_rebind<pointer, _Up>::type;
|
template <class _Up> using rebind = typename __pointer_traits_rebind<pointer, _Up>::type;
|
||||||
#else
|
#else
|
||||||
template <class _Up> struct rebind
|
template <class _Up> struct rebind
|
||||||
{typedef typename __pointer_traits_rebind<pointer, _Up>::type other;};
|
{typedef typename __pointer_traits_rebind<pointer, _Up>::type other;};
|
||||||
@ -1331,7 +1331,7 @@ struct _LIBCPP_VISIBLE allocator_traits
|
|||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
||||||
template <class _Tp> using rebind_alloc =
|
template <class _Tp> using rebind_alloc =
|
||||||
__allocator_traits_rebind<allocator_type, _Tp>::type;
|
typename __allocator_traits_rebind<allocator_type, _Tp>::type;
|
||||||
template <class _Tp> using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
|
template <class _Tp> using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
|
||||||
#else // _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
#else // _LIBCPP_HAS_NO_TEMPLATE_ALIASES
|
||||||
template <class _Tp> struct rebind_alloc
|
template <class _Tp> struct rebind_alloc
|
||||||
@ -3338,7 +3338,7 @@ inline _LIBCPP_INLINE_VISIBILITY
|
|||||||
shared_ptr<_Tp>&
|
shared_ptr<_Tp>&
|
||||||
shared_ptr<_Tp>::operator=(auto_ptr<_Yp>&& __r)
|
shared_ptr<_Tp>::operator=(auto_ptr<_Yp>&& __r)
|
||||||
{
|
{
|
||||||
shared_ptr(__r).swap(*this);
|
shared_ptr(_STD::move(__r)).swap(*this);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
move_only(move_only&&) {++move_only_constructed;}
|
move_only(move_only&&) {++move_only_constructed;}
|
||||||
move_only& operator=(move_only&&) {}
|
move_only& operator=(move_only&&) {return *this;}
|
||||||
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
operator std::__rv<move_only> () {return std::__rv<move_only>(*this);}
|
operator std::__rv<move_only> () {return std::__rv<move_only>(*this);}
|
||||||
move_only(std::__rv<move_only>) {++move_only_constructed;}
|
move_only(std::__rv<move_only>) {++move_only_constructed;}
|
||||||
|
@ -47,7 +47,7 @@ int main()
|
|||||||
A* ptrA = pA.get();
|
A* ptrA = pA.get();
|
||||||
{
|
{
|
||||||
std::shared_ptr<B> pB(new B);
|
std::shared_ptr<B> pB(new B);
|
||||||
pB = pA;
|
pB = std::move(pA);
|
||||||
assert(B::count == 1);
|
assert(B::count == 1);
|
||||||
assert(A::count == 1);
|
assert(A::count == 1);
|
||||||
assert(pB.use_count() == 1);
|
assert(pB.use_count() == 1);
|
||||||
@ -64,7 +64,7 @@ int main()
|
|||||||
A* ptrA = pA.get();
|
A* ptrA = pA.get();
|
||||||
{
|
{
|
||||||
std::shared_ptr<B> pB(new B);
|
std::shared_ptr<B> pB(new B);
|
||||||
pB = pA;
|
pB = std::move(pA);
|
||||||
assert(B::count == 0);
|
assert(B::count == 0);
|
||||||
assert(A::count == 0);
|
assert(A::count == 0);
|
||||||
assert(pB.use_count() == 1);
|
assert(pB.use_count() == 1);
|
||||||
@ -81,7 +81,7 @@ int main()
|
|||||||
A* ptrA = pA.get();
|
A* ptrA = pA.get();
|
||||||
{
|
{
|
||||||
std::shared_ptr<B> pB;
|
std::shared_ptr<B> pB;
|
||||||
pB = pA;
|
pB = std::move(pA);
|
||||||
assert(B::count == 1);
|
assert(B::count == 1);
|
||||||
assert(A::count == 1);
|
assert(A::count == 1);
|
||||||
assert(pB.use_count() == 1);
|
assert(pB.use_count() == 1);
|
||||||
@ -98,7 +98,7 @@ int main()
|
|||||||
A* ptrA = pA.get();
|
A* ptrA = pA.get();
|
||||||
{
|
{
|
||||||
std::shared_ptr<B> pB;
|
std::shared_ptr<B> pB;
|
||||||
pB = pA;
|
pB = std::move(pA);
|
||||||
assert(B::count == 0);
|
assert(B::count == 0);
|
||||||
assert(A::count == 0);
|
assert(A::count == 0);
|
||||||
assert(pB.use_count() == 1);
|
assert(pB.use_count() == 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user