Index: include/utility =================================================================== --- include/utility +++ include/utility @@ -930,6 +930,12 @@ template using __is_inplace_type = __is_inplace_type_imp<__uncvref_t<_Tp>>; +template struct __is_inplace_index_imp : false_type {}; +template struct __is_inplace_index_imp> : true_type {}; + +template +using __is_inplace_index = __is_inplace_index_imp<__uncvref_t<_Tp>>; + #endif // _LIBCPP_STD_VER > 14 template Index: test/libcxx/utilities/utility/__is_inplace_index.pass.cpp =================================================================== --- /dev/null +++ test/libcxx/utilities/utility/__is_inplace_index.pass.cpp @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// template using __is_inplace_index + +#include + +struct S {}; + +int main() { + static_assert( std::__is_inplace_index>::value, ""); + static_assert(!std::__is_inplace_index>::value, ""); + static_assert(!std::__is_inplace_index::value, ""); + static_assert(!std::__is_inplace_index::value, ""); + static_assert(!std::__is_inplace_index::value, ""); + static_assert(!std::__is_inplace_index::value, ""); +} Index: test/libcxx/utilities/utility/__is_inplace_type.pass.cpp =================================================================== --- /dev/null +++ test/libcxx/utilities/utility/__is_inplace_type.pass.cpp @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// template using __is_inplace_type + +#include + +struct S {}; + +int main() { + static_assert( std::__is_inplace_type>::value, ""); + static_assert(!std::__is_inplace_type>::value, ""); + static_assert(!std::__is_inplace_type::value, ""); + static_assert(!std::__is_inplace_type::value, ""); + static_assert(!std::__is_inplace_type::value, ""); + static_assert(!std::__is_inplace_type::value, ""); +}