Patchwork [v3] Add unique_ptr(auto_ptr<_Up>&&) + contraints

login
register
mail settings
Submitter Paolo Carlini
Date Aug. 10, 2010, 4:54 p.m.
Message ID <4C61845D.1000001@oracle.com>
Download mbox | patch
Permalink /patch/61399/
State New
Headers show

Comments

Paolo Carlini - Aug. 10, 2010, 4:54 p.m.
On 08/10/2010 06:33 PM, Paolo Carlini wrote:
>> Excellent.  We might as well remove the concept checks such as
>> __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
>> because they'll never fail if SFINAE means the constructor isn't eligible.
>>   
>>     
> Oh you are completely right, didn't notice that. I'll do it...
>   
As applied.

Paolo.

/////////////////
2010-08-10  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/bits/shared_ptr_base.h: Remove a few now redundant
	__glibcxx_function_requires(_ConvertibleConcept...).
	* testsuite/20_util/shared_ptr/cons/43820.cc: Adjust dg-error
	line number.
	* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.

Patch

Index: include/bits/shared_ptr_base.h
===================================================================
--- include/bits/shared_ptr_base.h	(revision 163053)
+++ include/bits/shared_ptr_base.h	(working copy)
@@ -605,7 +605,7 @@ 
 	       std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
 	__shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
 	: _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
-	{ __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) }
+	{ }
 
       __shared_ptr(__shared_ptr&& __r)
       : _M_ptr(__r._M_ptr), _M_refcount() // never throws
@@ -619,7 +619,6 @@ 
 	__shared_ptr(__shared_ptr<_Tp1, _Lp>&& __r)
 	: _M_ptr(__r._M_ptr), _M_refcount() // never throws
 	{
-	  __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
 	  _M_refcount._M_swap(__r._M_refcount);
 	  __r._M_ptr = 0;
 	}
@@ -971,16 +970,13 @@ 
 	       std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
 	__weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r)
 	: _M_refcount(__r._M_refcount) // never throws
-	{
-	  __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
-	  _M_ptr = __r.lock().get();
-	}
+        { _M_ptr = __r.lock().get(); }
 
       template<typename _Tp1, typename = typename
 	       std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
 	__weak_ptr(const __shared_ptr<_Tp1, _Lp>& __r)
 	: _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
-	{ __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) }
+	{ }
 
       template<typename _Tp1>
 	__weak_ptr&
Index: testsuite/20_util/shared_ptr/cons/43820.cc
===================================================================
--- testsuite/20_util/shared_ptr/cons/43820.cc	(revision 163053)
+++ testsuite/20_util/shared_ptr/cons/43820.cc	(working copy)
@@ -35,6 +35,6 @@ 
   // { dg-error "incomplete" "" { target *-*-* } 566 }
 
   std::shared_ptr<X> p9(ap());  // { dg-error "here" }
-  // { dg-error "incomplete" "" { target *-*-* } 659 }
+  // { dg-error "incomplete" "" { target *-*-* } 658 }
 
 }
Index: testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
===================================================================
--- testsuite/20_util/weak_ptr/comparison/cmp_neg.cc	(revision 163053)
+++ testsuite/20_util/weak_ptr/comparison/cmp_neg.cc	(working copy)
@@ -43,7 +43,7 @@ 
 
 // { dg-warning "note" "" { target *-*-* } 327 }
 // { dg-warning "note" "" { target *-*-* } 446 }
-// { dg-warning "note" "" { target *-*-* } 864 }
+// { dg-warning "note" "" { target *-*-* } 863 }
 // { dg-warning "note" "" { target *-*-* } 580 }
 // { dg-warning "note" "" { target *-*-* } 1027 }
 // { dg-warning "note" "" { target *-*-* } 340 }