|
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