Update issue status for LWG 2744
llvm-svn: 284322
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 50253ed1c67b75c71c8ec2d24ed915c032b11822
diff --git a/include/any b/include/any
index 8fe9e8f..7f2cf1e 100644
--- a/include/any
+++ b/include/any
@@ -200,7 +200,7 @@
, class _Tp = decay_t<_ValueType>
, class = enable_if_t<
!is_same<_Tp, any>::value &&
- !__is_inplace_type<_ValueType>::value &&
+ !__is_inplace_type_tag<_ValueType>::value &&
is_copy_constructible<_Tp>::value>
>
_LIBCPP_INLINE_VISIBILITY
@@ -241,15 +241,12 @@
return *this;
}
- // TODO: Should this be constrained to disallow in_place types like the
- // ValueType constructor?
template <
class _ValueType
, class _Tp = decay_t<_ValueType>
, class = enable_if_t<
!is_same<_Tp, any>::value
- && is_copy_constructible<_Tp>::value
- && !__is_inplace_type<_ValueType>::value>
+ && is_copy_constructible<_Tp>::value>
>
_LIBCPP_INLINE_VISIBILITY
any & operator=(_ValueType && __rhs);
diff --git a/include/utility b/include/utility
index cfab350..5e55506 100644
--- a/include/utility
+++ b/include/utility
@@ -928,10 +928,20 @@
return in_place_tag(__in_place_tag{});
}
-template <class _Tp> struct __is_inplace_type : false_type {};
-template <> struct __is_inplace_type<in_place_t> : true_type {};
-template <class _Tp> struct __is_inplace_type<in_place_type_t<_Tp>> : true_type {};
-template <size_t _Idx> struct __is_inplace_type<in_place_index_t<_Idx>> : true_type {};
+template <class _Tp> struct __is_inplace_tag_imp : false_type {};
+template <> struct __is_inplace_tag_imp<in_place_tag(__in_place_tag)> : true_type {};
+template <class _Tp> struct __is_inplace_tag_imp<in_place_tag(__in_place_type_tag<_Tp>)> : true_type {};
+template <size_t _Idx> struct __is_inplace_tag_imp<in_place_tag(__in_place_index_tag<_Idx>)> : true_type {};
+
+template <class _Tp>
+using __is_inplace_tag = __is_inplace_tag_imp<remove_pointer_t<decay_t<_Tp>>>;
+
+template <class _Tp> struct __is_inplace_type_tag_imp : false_type {};
+template <class _Tp> struct __is_inplace_type_tag_imp<in_place_tag(__in_place_type_tag<_Tp>)> : true_type {};
+
+template <class _Tp>
+using __is_inplace_type_tag = __is_inplace_type_tag_imp<remove_pointer_t<decay_t<_Tp>>>;
+
#endif // _LIBCPP_STD_VER > 14