diff --git a/libcxx/include/utility b/libcxx/include/utility index 958378b8ba3e..00e3cd208ecb 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -930,6 +930,12 @@ template struct __is_inplace_type_imp> : true_t 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 diff --git a/libcxx/test/libcxx/utilities/utility/__is_inplace_index.pass.cpp b/libcxx/test/libcxx/utilities/utility/__is_inplace_index.pass.cpp new file mode 100644 index 000000000000..bcb2f91ac9d4 --- /dev/null +++ b/libcxx/test/libcxx/utilities/utility/__is_inplace_index.pass.cpp @@ -0,0 +1,32 @@ +//===----------------------------------------------------------------------===// +// +// 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() { + using I = std::in_place_index_t<0>; + 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, ""); + 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, ""); + static_assert(!std::__is_inplace_index::value, ""); + static_assert(!std::__is_inplace_index::value, ""); +} diff --git a/libcxx/test/libcxx/utilities/utility/__is_inplace_type.pass.cpp b/libcxx/test/libcxx/utilities/utility/__is_inplace_type.pass.cpp new file mode 100644 index 000000000000..10a4aa57174f --- /dev/null +++ b/libcxx/test/libcxx/utilities/utility/__is_inplace_type.pass.cpp @@ -0,0 +1,32 @@ +//===----------------------------------------------------------------------===// +// +// 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() { + using T = std::in_place_type_t; + 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, ""); + 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, ""); + static_assert(!std::__is_inplace_type::value, ""); + static_assert(!std::__is_inplace_type::value, ""); +}