Fix std::experimental::shared_ptr SFINAE constraints
authorJonathan Wakely <jwakely@redhat.com>
Wed, 19 Oct 2016 09:35:03 +0000 (10:35 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 19 Oct 2016 09:35:03 +0000 (10:35 +0100)
commit84870b6bb2691cc4031b8408b41bbb6583526c0f
treedad6bafec631e0e2dc375fc508b4dd431b893529
parente182393e31609b0d1474cea18c69bbb6c287ae6b
Fix std::experimental::shared_ptr SFINAE constraints

* include/experimental/bits/shared_ptr.h
(__shared_ptr<__libfund_v1<_Tp, false>, _Lp>::_Compatible): Just use
is_convertible for non-array specialization.
(__shared_ptr<__libfund_v1<_Tp, false>, _Lp>::_UniqCompatible): New
constraint for conversions from unique_ptr.
(__shared_ptr<__libfund_v1<_Tp, false>, _Lp>::__shared_ptr): Constrain.
(__shared_ptr<__libfund_v1<_Tp, false>, _Lp>::reset): Likewise.
(__sp_compatible_v): New variable template for trait.
(__sp_is_constructible): New trait to check shared_ptr constraints.
(__sp_is_constructible_v): New variable template for trait.
(__shared_ptr<__libfund_v1<_Tp, true>, _Lp>::_SafeConv): New
constraint for construction/reset, using __sp_is_constructible_v.
(__shared_ptr<__libfund_v1<_Tp, true>, _Lp>::_UniqCompatible): New
constraint for conversions from unique_ptr.
(__shared_ptr<__libfund_v1<_Tp, true>, _Lp>::__shared_ptr): Constrain.
(__shared_ptr<__libfund_v1<_Tp, true>, _Lp>::reset): Likewise.
(shared_ptr::_SafeConv): Constraint for checking constructors.
(shared_ptr(Tp1*), shared_ptr(_Tp1, _Deleter))
(shared_ptr(_Tp1, _Deleter, _Alloc)): Constrain with _SafeConv.
(shared_ptr(const weak_ptr<_Tp1>&)): Constrain with _Compatible.
(shared_ptr(auto_ptr<_Tp1>&&)): Fix, remove TODO.
* testsuite/experimental/memory/shared_ptr/cons/pointer_ctor.cc:
Remove tests using invalid conversions.
* testsuite/experimental/memory/shared_ptr/cons/pointer_ctor_neg.cc:
New test.
* testsuite/experimental/memory/shared_ptr/cons/torture.cc: New test.
* testsuite/experimental/memory/shared_ptr/modifiers/reset.cc: Remove
tests using invalid conversions.
* testsuite/experimental/memory/shared_ptr/modifiers/reset_neg.cc: New
test.
* testsuite/experimental/memory/shared_ptr/observers/use_count.cc:
Remove tests using invalid conversions.

From-SVN: r241331
libstdc++-v3/ChangeLog
libstdc++-v3/include/experimental/bits/shared_ptr.h
libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor.cc
libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/torture.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/unique_ptr_ctor.cc
libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset.cc
libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/use_count.cc