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