Implement void_t from N3911. Add a private version for use in the library before C++1z. Update the 1z status page, marking a bunch of issues that don't require library changes as complete (2129, 2212, 2230, 2233, 2325, 2365, 2376)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@222138 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
69
test/utilities/meta/meta.unary.prop.query/void_t.pass.cpp
Normal file
69
test/utilities/meta/meta.unary.prop.query/void_t.pass.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// type_traits
|
||||
|
||||
// void_t
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 14
|
||||
int main () {}
|
||||
#else
|
||||
|
||||
template <class T>
|
||||
void test1()
|
||||
{
|
||||
static_assert( std::is_same<void, std::void_t<T>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const T>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<volatile T>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const volatile T>>::value, "");
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
void test2()
|
||||
{
|
||||
static_assert( std::is_same<void, std::void_t<T, U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const T, U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<volatile T, U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const volatile T, U>>::value, "");
|
||||
|
||||
static_assert( std::is_same<void, std::void_t<T, const U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const T, const U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<volatile T, const U>>::value, "");
|
||||
static_assert( std::is_same<void, std::void_t<const volatile T, const U>>::value, "");
|
||||
}
|
||||
|
||||
class Class
|
||||
{
|
||||
public:
|
||||
~Class();
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
static_assert( std::is_same<void, std::void_t<>>::value, "");
|
||||
|
||||
test1<void>();
|
||||
test1<int>();
|
||||
test1<double>();
|
||||
test1<int&>();
|
||||
test1<Class>();
|
||||
test1<Class[]>();
|
||||
test1<Class[5]>();
|
||||
|
||||
test2<void, int>();
|
||||
test2<double, int>();
|
||||
test2<int&, int>();
|
||||
test2<Class&, bool>();
|
||||
test2<void *, int&>();
|
||||
|
||||
static_assert( std::is_same<void, std::void_t<int, double const &, Class, volatile int[], void>>::value, "");
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user