Cleanup and better scope unique_ptr internals
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@300408 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/memory b/include/memory
index 41c3bda..44a0c34 100644
--- a/include/memory
+++ b/include/memory
@@ -2342,19 +2342,19 @@
struct __nat { int __for_bool_; };
#ifndef _LIBCPP_CXX03_LANG
- typedef __unique_ptr_deleter_sfinae<_Dp> _SFINAE;
+ typedef __unique_ptr_deleter_sfinae<_Dp> _DeleterSFINAE;
template <bool _Dummy>
using _LValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__lval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
template <bool _Dummy>
using _GoodRValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__good_rval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
template <bool _Dummy>
using _BadRValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__bad_rval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
template <bool _Dummy, class _Deleter = typename __dependent_type<
__identity<deleter_type>, _Dummy>::type>
@@ -2587,17 +2587,6 @@
}
};
-template <class _From, class _ToUnique>
-struct __check_array_pointer_conversion : is_same<_From, typename _ToUnique::pointer> {};
-
-template <class _FromElem, class _ToUnique>
-struct __check_array_pointer_conversion<_FromElem*, _ToUnique>
- : integral_constant<bool,
- is_same<_FromElem*, typename _ToUnique::pointer>::value ||
- (is_same<typename _ToUnique::pointer, typename _ToUnique::element_type*>::value &&
- is_convertible<_FromElem(*)[], typename _ToUnique::element_type(*)[]>::value)
- >
-{};
template <class _Tp, class _Dp>
class _LIBCPP_TEMPLATE_VIS unique_ptr<_Tp[], _Dp> {
@@ -2609,26 +2598,32 @@
private:
__compressed_pair<pointer, deleter_type> __ptr_;
- struct __nat { int __for_bool_; };
+ template <class _From>
+ struct _CheckArrayPointerConversion : is_same<_From, pointer> {};
- typedef deleter_type& _Dp_reference;
- typedef typename remove_reference<typename add_const<deleter_type>::type>::type&
- _Dp_const_reference;
+ template <class _FromElem>
+ struct _CheckArrayPointerConversion<_FromElem*>
+ : integral_constant<bool,
+ is_same<_FromElem*, pointer>::value ||
+ (is_same<pointer, element_type*>::value &&
+ is_convertible<_FromElem(*)[], element_type(*)[]>::value)
+ >
+ {};
#ifndef _LIBCPP_CXX03_LANG
- typedef __unique_ptr_deleter_sfinae<_Dp> _SFINAE;
+ typedef __unique_ptr_deleter_sfinae<_Dp> _DeleterSFINAE;
template <bool _Dummy>
using _LValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__lval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
template <bool _Dummy>
using _GoodRValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__good_rval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
template <bool _Dummy>
using _BadRValRefType =
- typename __dependent_type<_SFINAE, _Dummy>::__bad_rval_ref_type;
+ typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
template <bool _Dummy, class _Deleter = typename __dependent_type<
__identity<deleter_type>, _Dummy>::type>
@@ -2642,7 +2637,7 @@
template <class _Pp>
using _EnableIfPointerConvertible = typename enable_if<
- __check_array_pointer_conversion<_Pp, unique_ptr>::value
+ _CheckArrayPointerConversion<_Pp>::value
>::type;
template <class _UPtr, class _Up,
@@ -2860,7 +2855,7 @@
template <class _Pp>
_LIBCPP_INLINE_VISIBILITY
typename enable_if<
- __check_array_pointer_conversion<_Pp, unique_ptr>::value
+ _CheckArrayPointerConversion<_Pp>::value
>::type
reset(_Pp __p) _NOEXCEPT {
pointer __tmp = __ptr_.first();