Commit d779a591 by Paolo Carlini Committed by Paolo Carlini

unique_ptr.h: (unique_ptr<>:: unique_ptr(const unique_ptr<_Up...

2010-02-16  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/bits/unique_ptr.h: (unique_ptr<>::
	unique_ptr(const unique_ptr<_Up, _Up_Deleter>&),
	operator=(const unique_ptr<_Up, _Up_Deleter>&)): Remove, redundant,
	per DR 1303.
	* include/bits/shared_ptr.h (shared_ptr<>::
	shared_ptr(const unique_ptr<_Up, _Up_Deleter>&),
	operator=(const unique_ptr<_Up, _Up_Deleter>&)): Likewise.
	* include/bits/shared_ptr_base.h (__shared_ptr<>::
	__shared_ptr(const unique_ptr<_Up, _Up_Deleter>&),
	operator=(const unique_ptr<_Up, _Up_Deleter>&)): Likewise.
	* testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Adjust.
	* testsuite/20_util/unique_ptr/assign/assign_neg.cc: Likewise.
	* testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc: Likewise.
	* testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc:
	Likewise.

From-SVN: r156807
parent 7c7580ef
2010-02-16 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/unique_ptr.h: (unique_ptr<>::
unique_ptr(const unique_ptr<_Up, _Up_Deleter>&),
operator=(const unique_ptr<_Up, _Up_Deleter>&)): Remove, redundant,
per DR 1303.
* include/bits/shared_ptr.h (shared_ptr<>::
shared_ptr(const unique_ptr<_Up, _Up_Deleter>&),
operator=(const unique_ptr<_Up, _Up_Deleter>&)): Likewise.
* include/bits/shared_ptr_base.h (__shared_ptr<>::
__shared_ptr(const unique_ptr<_Up, _Up_Deleter>&),
operator=(const unique_ptr<_Up, _Up_Deleter>&)): Likewise.
* testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Adjust.
* testsuite/20_util/unique_ptr/assign/assign_neg.cc: Likewise.
* testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc: Likewise.
* testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc:
Likewise.
2010-02-15 Paolo Carlini <paolo.carlini@oracle.com> 2010-02-15 Paolo Carlini <paolo.carlini@oracle.com>
* testsuite/ext/median.cc: Adjust. * testsuite/ext/median.cc: Adjust.
......
...@@ -60,7 +60,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -60,7 +60,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
/// 2.2.3.7 shared_ptr I/O /// 2.2.3.7 shared_ptr I/O
template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp> template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp>
std::basic_ostream<_Ch, _Tr>& inline std::basic_ostream<_Ch, _Tr>&
operator<<(std::basic_ostream<_Ch, _Tr>& __os, operator<<(std::basic_ostream<_Ch, _Tr>& __os,
const __shared_ptr<_Tp, _Lp>& __p) const __shared_ptr<_Tp, _Lp>& __p)
{ {
...@@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* *
* __shared_ptr will release __p by calling __d(__p) * __shared_ptr will release __p by calling __d(__p)
*/ */
template<typename _Tp1, typename _Deleter> template<typename _Tp1, typename _Deleter>
shared_ptr(_Tp1* __p, _Deleter __d) : __shared_ptr<_Tp>(__p, __d) { } shared_ptr(_Tp1* __p, _Deleter __d) : __shared_ptr<_Tp>(__p, __d) { }
/** /**
...@@ -210,9 +210,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -210,9 +210,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif #endif
template<typename _Tp1, typename _Del> template<typename _Tp1, typename _Del>
explicit shared_ptr(const std::unique_ptr<_Tp1, _Del>&) = delete;
template<typename _Tp1, typename _Del>
explicit shared_ptr(std::unique_ptr<_Tp1, _Del>&& __r) explicit shared_ptr(std::unique_ptr<_Tp1, _Del>&& __r)
: __shared_ptr<_Tp>(std::move(__r)) { } : __shared_ptr<_Tp>(std::move(__r)) { }
...@@ -251,10 +248,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -251,10 +248,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _Tp1, typename _Del> template<typename _Tp1, typename _Del>
shared_ptr& shared_ptr&
operator=(const std::unique_ptr<_Tp1, _Del>& __r) = delete;
template<typename _Tp1, typename _Del>
shared_ptr&
operator=(std::unique_ptr<_Tp1, _Del>&& __r) operator=(std::unique_ptr<_Tp1, _Del>&& __r)
{ {
this->__shared_ptr<_Tp>::operator=(std::move(__r)); this->__shared_ptr<_Tp>::operator=(std::move(__r));
......
// shared_ptr and weak_ptr implementation details -*- C++ -*- // shared_ptr and weak_ptr implementation details -*- C++ -*-
// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. // Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the // software; you can redistribute it and/or modify it under the
...@@ -606,9 +606,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -606,9 +606,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_M_ptr = __r._M_ptr; _M_ptr = __r._M_ptr;
} }
template<typename _Tp1, typename _Del>
explicit __shared_ptr(const std::unique_ptr<_Tp1, _Del>&) = delete;
// If an exception is thrown this constructor has no effect. // If an exception is thrown this constructor has no effect.
template<typename _Tp1, typename _Del> template<typename _Tp1, typename _Del>
explicit __shared_ptr(std::unique_ptr<_Tp1, _Del>&& __r) explicit __shared_ptr(std::unique_ptr<_Tp1, _Del>&& __r)
...@@ -670,10 +667,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -670,10 +667,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _Tp1, typename _Del> template<typename _Tp1, typename _Del>
__shared_ptr& __shared_ptr&
operator=(const std::unique_ptr<_Tp1, _Del>& __r) = delete;
template<typename _Tp1, typename _Del>
__shared_ptr&
operator=(std::unique_ptr<_Tp1, _Del>&& __r) operator=(std::unique_ptr<_Tp1, _Del>&& __r)
{ {
__shared_ptr(std::move(__r)).swap(*this); __shared_ptr(std::move(__r)).swap(*this);
......
...@@ -149,7 +149,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -149,7 +149,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
} }
// Observers. // Observers.
typename std::add_lvalue_reference<element_type>::type operator*() const typename std::add_lvalue_reference<element_type>::type
operator*() const
{ {
_GLIBCXX_DEBUG_ASSERT(get() != 0); _GLIBCXX_DEBUG_ASSERT(get() != 0);
return *get(); return *get();
...@@ -207,15 +208,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -207,15 +208,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Disable copy from lvalue. // Disable copy from lvalue.
unique_ptr(const unique_ptr&) = delete; unique_ptr(const unique_ptr&) = delete;
template<typename _Up, typename _Up_Deleter>
unique_ptr(const unique_ptr<_Up, _Up_Deleter>&) = delete;
unique_ptr& operator=(const unique_ptr&) = delete; unique_ptr& operator=(const unique_ptr&) = delete;
template<typename _Up, typename _Up_Deleter>
unique_ptr& operator=(const unique_ptr<_Up, _Up_Deleter>&) = delete;
private: private:
__tuple_type _M_t; __tuple_type _M_t;
}; };
......
// { dg-options "-std=gnu++0x" } // { dg-options "-std=gnu++0x" }
// { dg-do compile } // { dg-do compile }
// Copyright (C) 2008, 2009 Free Software Foundation // Copyright (C) 2008, 2009, 2010 Free Software Foundation
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the // software; you can redistribute it and/or modify it under the
...@@ -35,7 +35,7 @@ test01() ...@@ -35,7 +35,7 @@ test01()
std::shared_ptr<A> a; std::shared_ptr<A> a;
std::unique_ptr<A> u; std::unique_ptr<A> u;
a = u; // { dg-error "used here" } a = u; // { dg-error "cannot bind" }
return 0; return 0;
} }
...@@ -46,4 +46,4 @@ main() ...@@ -46,4 +46,4 @@ main()
test01(); test01();
return 0; return 0;
} }
// { dg-excess-errors "deleted function" } // { dg-excess-errors "initializing argument" }
// { dg-options "-std=gnu++0x" } // { dg-options "-std=gnu++0x" }
// { dg-do compile } // { dg-do compile }
// Copyright (C) 2008, 2009 Free Software Foundation // Copyright (C) 2008, 2009, 2010 Free Software Foundation
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the // software; you can redistribute it and/or modify it under the
...@@ -34,7 +34,7 @@ test01() ...@@ -34,7 +34,7 @@ test01()
bool test __attribute__((unused)) = true; bool test __attribute__((unused)) = true;
std::unique_ptr<A> a; std::unique_ptr<A> a;
std::shared_ptr<A> p(a); // { dg-error "used here" } std::shared_ptr<A> p(a); // { dg-error "cannot bind" }
return 0; return 0;
} }
...@@ -45,4 +45,4 @@ main() ...@@ -45,4 +45,4 @@ main()
test01(); test01();
return 0; return 0;
} }
// { dg-excess-errors "deleted function" } // { dg-excess-errors "initializing argument" }
...@@ -49,7 +49,7 @@ test03() ...@@ -49,7 +49,7 @@ test03()
std::unique_ptr<int[2]> p2 = p1; std::unique_ptr<int[2]> p2 = p1;
} }
// { dg-error "deleted function" "" { target *-*-* } 354 } // { dg-error "deleted function" "" { target *-*-* } 348 }
// { dg-error "used here" "" { target *-*-* } 42 } // { dg-error "used here" "" { target *-*-* } 42 }
// { dg-error "no matching" "" { target *-*-* } 48 } // { dg-error "no matching" "" { target *-*-* } 48 }
// { dg-warning "candidates are" "" { target *-*-* } 115 } // { dg-warning "candidates are" "" { target *-*-* } 115 }
...@@ -57,5 +57,5 @@ test03() ...@@ -57,5 +57,5 @@ test03()
// { dg-warning "note" "" { target *-*-* } 103 } // { dg-warning "note" "" { target *-*-* } 103 }
// { dg-warning "note" "" { target *-*-* } 98 } // { dg-warning "note" "" { target *-*-* } 98 }
// { dg-warning "note" "" { target *-*-* } 92 } // { dg-warning "note" "" { target *-*-* } 92 }
// { dg-error "deleted function" "" { target *-*-* } 209 } // { dg-error "deleted function" "" { target *-*-* } 210 }
// { dg-error "used here" "" { target *-*-* } 49 } // { dg-error "used here" "" { target *-*-* } 49 }
...@@ -36,4 +36,4 @@ void test01() ...@@ -36,4 +36,4 @@ void test01()
} }
// { dg-error "used here" "" { target *-*-* } 35 } // { dg-error "used here" "" { target *-*-* } 35 }
// { dg-error "deleted function" "" { target *-*-* } 344 } // { dg-error "deleted function" "" { target *-*-* } 338 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment