|
32 | 32 | #include <__type_traits/integral_constant.h> |
33 | 33 | #include <__type_traits/is_array.h> |
34 | 34 | #include <__type_traits/is_assignable.h> |
| 35 | +#include <__type_traits/is_bounded_array.h> |
35 | 36 | #include <__type_traits/is_constant_evaluated.h> |
36 | 37 | #include <__type_traits/is_constructible.h> |
37 | 38 | #include <__type_traits/is_convertible.h> |
|
41 | 42 | #include <__type_traits/is_same.h> |
42 | 43 | #include <__type_traits/is_swappable.h> |
43 | 44 | #include <__type_traits/is_trivially_relocatable.h> |
| 45 | +#include <__type_traits/is_unbounded_array.h> |
44 | 46 | #include <__type_traits/is_void.h> |
45 | 47 | #include <__type_traits/remove_extent.h> |
46 | 48 | #include <__type_traits/type_identity.h> |
@@ -758,55 +760,36 @@ operator<=>(const unique_ptr<_T1, _D1>& __x, nullptr_t) { |
758 | 760 |
|
759 | 761 | #if _LIBCPP_STD_VER >= 14 |
760 | 762 |
|
761 | | -template <class _Tp> |
762 | | -struct __unique_if { |
763 | | - typedef unique_ptr<_Tp> __unique_single; |
764 | | -}; |
765 | | - |
766 | | -template <class _Tp> |
767 | | -struct __unique_if<_Tp[]> { |
768 | | - typedef unique_ptr<_Tp[]> __unique_array_unknown_bound; |
769 | | -}; |
770 | | - |
771 | | -template <class _Tp, size_t _Np> |
772 | | -struct __unique_if<_Tp[_Np]> { |
773 | | - typedef void __unique_array_known_bound; |
774 | | -}; |
775 | | - |
776 | | -template <class _Tp, class... _Args> |
777 | | -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 typename __unique_if<_Tp>::__unique_single |
778 | | -make_unique(_Args&&... __args) { |
| 763 | +template <class _Tp, class... _Args, enable_if_t<!is_array<_Tp>::value, int> = 0> |
| 764 | +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 unique_ptr<_Tp> make_unique(_Args&&... __args) { |
779 | 765 | return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); |
780 | 766 | } |
781 | 767 |
|
782 | | -template <class _Tp> |
783 | | -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 typename __unique_if<_Tp>::__unique_array_unknown_bound |
784 | | -make_unique(size_t __n) { |
| 768 | +template <class _Tp, enable_if_t<__is_unbounded_array_v<_Tp>, int> = 0> |
| 769 | +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 unique_ptr<_Tp> make_unique(size_t __n) { |
785 | 770 | typedef __remove_extent_t<_Tp> _Up; |
786 | 771 | return unique_ptr<_Tp>(__private_constructor_tag(), new _Up[__n](), __n); |
787 | 772 | } |
788 | 773 |
|
789 | | -template <class _Tp, class... _Args> |
790 | | -typename __unique_if<_Tp>::__unique_array_known_bound make_unique(_Args&&...) = delete; |
| 774 | +template <class _Tp, class... _Args, enable_if_t<__is_bounded_array_v<_Tp>, int> = 0> |
| 775 | +void make_unique(_Args&&...) = delete; |
791 | 776 |
|
792 | 777 | #endif // _LIBCPP_STD_VER >= 14 |
793 | 778 |
|
794 | 779 | #if _LIBCPP_STD_VER >= 20 |
795 | 780 |
|
796 | | -template <class _Tp> |
797 | | -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 typename __unique_if<_Tp>::__unique_single |
798 | | -make_unique_for_overwrite() { |
| 781 | +template <class _Tp, enable_if_t<!is_array_v<_Tp>, int> = 0> |
| 782 | +_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 unique_ptr<_Tp> make_unique_for_overwrite() { |
799 | 783 | return unique_ptr<_Tp>(new _Tp); |
800 | 784 | } |
801 | 785 |
|
802 | | -template <class _Tp> |
803 | | -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 typename __unique_if<_Tp>::__unique_array_unknown_bound |
804 | | -make_unique_for_overwrite(size_t __n) { |
| 786 | +template <class _Tp, enable_if_t<is_unbounded_array_v<_Tp>, int> = 0> |
| 787 | +_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 unique_ptr<_Tp> make_unique_for_overwrite(size_t __n) { |
805 | 788 | return unique_ptr<_Tp>(__private_constructor_tag(), new __remove_extent_t<_Tp>[__n], __n); |
806 | 789 | } |
807 | 790 |
|
808 | | -template <class _Tp, class... _Args> |
809 | | -typename __unique_if<_Tp>::__unique_array_known_bound make_unique_for_overwrite(_Args&&...) = delete; |
| 791 | +template <class _Tp, class... _Args, enable_if_t<is_bounded_array_v<_Tp>, int> = 0> |
| 792 | +void make_unique_for_overwrite(_Args&&...) = delete; |
810 | 793 |
|
811 | 794 | #endif // _LIBCPP_STD_VER >= 20 |
812 | 795 |
|
|
0 commit comments