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