diff options
Diffstat (limited to 'libcxx/test')
17 files changed, 79 insertions, 48 deletions
diff --git a/libcxx/test/utilities/meta/meta.hel/integral_constant.pass.cpp b/libcxx/test/utilities/meta/meta.hel/integral_constant.pass.cpp index f7a35205859..7f9e2769070 100644 --- a/libcxx/test/utilities/meta/meta.hel/integral_constant.pass.cpp +++ b/libcxx/test/utilities/meta/meta.hel/integral_constant.pass.cpp @@ -20,7 +20,11 @@ int main() static_assert(_5::value == 5, ""); static_assert((std::is_same<_5::value_type, int>::value), ""); static_assert((std::is_same<_5::type, _5>::value), ""); +#ifndef _LIBCPP_HAS_NO_CONSTEXPR static_assert((_5() == 5), ""); +#else + assert(_5() == 5); +#endif static_assert(std::false_type::value == false, ""); static_assert((std::is_same<std::false_type::value_type, bool>::value), ""); diff --git a/libcxx/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp b/libcxx/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp deleted file mode 100644 index 67ab944bc5b..00000000000 --- a/libcxx/test/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 - -// aligned_union - -#include <type_traits> - -int main() -{ -#error aligned_union is not implemented -} diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp index d836e6ac73a..e37987c54c5 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_assignable.pass.cpp @@ -31,4 +31,8 @@ int main() static_assert(( std::is_assignable<int&, double>::value), ""); static_assert(( std::is_assignable<B, A>::value), ""); static_assert((!std::is_assignable<A, B>::value), ""); + static_assert((!std::is_assignable<void, const void>::value), ""); + static_assert((!std::is_assignable<const void, const void>::value), ""); + static_assert(( std::is_assignable<void*&, void*>::value), ""); + static_assert((!std::is_assignable<int(), int>::value), ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp index 40b15c4eaed..6f58adc5077 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp @@ -18,6 +18,8 @@ struct A { explicit A(int); A(int, double); +private: + A(char); }; int main() @@ -27,4 +29,9 @@ int main() static_assert((std::is_constructible<A, int>::value), ""); static_assert((std::is_constructible<A, int, double>::value), ""); static_assert((!std::is_constructible<A>::value), ""); + static_assert((!std::is_constructible<A, char>::value), ""); + static_assert((!std::is_constructible<A, void>::value), ""); + static_assert((!std::is_constructible<void>::value), ""); + static_assert((!std::is_constructible<int&>::value), ""); + static_assert(( std::is_constructible<int&, int&>::value), ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp index c44ba6d04d6..9f9acd191a5 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable.pass.cpp @@ -35,6 +35,11 @@ struct A A(); }; +class B +{ + B& operator=(const B&); +}; + int main() { static_assert(( std::is_copy_assignable<int>::value), ""); @@ -47,4 +52,6 @@ int main() static_assert(( std::is_copy_assignable<Union>::value), ""); static_assert(( std::is_copy_assignable<NotEmpty>::value), ""); static_assert(( std::is_copy_assignable<Empty>::value), ""); + static_assert((!std::is_copy_assignable<B>::value), ""); + static_assert((!std::is_copy_assignable<void>::value), ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp index 691ac69301e..1cfb76fa5a2 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible.pass.cpp @@ -47,6 +47,11 @@ struct A A(const A&); }; +class B +{ + B(const B&); +}; + int main() { test_is_copy_constructible<char[3], false>(); @@ -55,6 +60,7 @@ int main() test_is_copy_constructible<Abstract, false>(); test_is_copy_constructible<A, true>(); + test_is_copy_constructible<B, false>(); test_is_copy_constructible<int&, true>(); test_is_copy_constructible<Union, true>(); test_is_copy_constructible<Empty, true>(); diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp index 0830ce166d1..760a79b049e 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_default_constructible.pass.cpp @@ -50,6 +50,11 @@ struct A A(); }; +class B +{ + B(); +}; + int main() { test_is_default_constructible<void, false>(); @@ -58,6 +63,7 @@ int main() test_is_default_constructible<Abstract, false>(); test_is_default_constructible<A, true>(); + test_is_default_constructible<B, false>(); test_is_default_constructible<Union, true>(); test_is_default_constructible<Empty, true>(); test_is_default_constructible<int, true>(); diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp index b3640f70153..30e31ba5f53 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp @@ -13,10 +13,21 @@ #include <type_traits> +struct A +{ +}; + +struct B +{ + B(); +}; + int main() { static_assert( std::is_literal_type<int>::value, ""); static_assert( std::is_literal_type<const int>::value, ""); - static_assert(!std::is_literal_type<int&>::value, ""); - static_assert(!std::is_literal_type<volatile int&>::value, ""); + static_assert( std::is_literal_type<int&>::value, ""); + static_assert( std::is_literal_type<volatile int&>::value, ""); + static_assert( std::is_literal_type<A>::value, ""); + static_assert(!std::is_literal_type<B>::value, ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp index 3f44f8ebcb9..8941fe3e898 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp @@ -41,7 +41,8 @@ int main() static_assert((!std::is_move_assignable<const int>::value), ""); static_assert((!std::is_move_assignable<int[]>::value), ""); static_assert((!std::is_move_assignable<int[3]>::value), ""); - static_assert(( std::is_move_assignable<int&>::value), ""); + static_assert((!std::is_move_assignable<int[3]>::value), ""); + static_assert((!std::is_move_assignable<void>::value), ""); static_assert(( std::is_move_assignable<A>::value), ""); static_assert(( std::is_move_assignable<bit_zero>::value), ""); static_assert(( std::is_move_assignable<Union>::value), ""); diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp index 3dc73cef1eb..5da776fa5f6 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp @@ -47,4 +47,6 @@ int main() static_assert((!std::is_nothrow_constructible<A, int>::value), ""); static_assert((!std::is_nothrow_constructible<A, int, double>::value), ""); static_assert((!std::is_nothrow_constructible<A>::value), ""); + static_assert(( std::is_nothrow_constructible<Empty>::value), ""); + static_assert(( std::is_nothrow_constructible<Empty, const Empty&>::value), ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp index b0fe0638559..1436dd44de1 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable.pass.cpp @@ -42,6 +42,7 @@ struct A int main() { + test_has_nothrow_assign<const int, false>(); test_has_nothrow_assign<void, false>(); test_has_nothrow_assign<A, false>(); test_has_nothrow_assign<int&, true>(); diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible.pass.cpp index 6bb510441bc..99fce65dcc7 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible.pass.cpp @@ -18,8 +18,6 @@ void test_is_nothrow_copy_constructible() { static_assert( std::is_nothrow_copy_constructible<T>::value, ""); static_assert( std::is_nothrow_copy_constructible<const T>::value, ""); - static_assert( std::is_nothrow_copy_constructible<volatile T>::value, ""); - static_assert( std::is_nothrow_copy_constructible<const volatile T>::value, ""); } template <class T> @@ -35,12 +33,6 @@ class Empty { }; -class NotEmpty -{ -public: - virtual ~NotEmpty(); -}; - union Union {}; struct bit_zero @@ -65,6 +57,5 @@ int main() test_is_nothrow_copy_constructible<double>(); test_is_nothrow_copy_constructible<int*>(); test_is_nothrow_copy_constructible<const int*>(); - test_is_nothrow_copy_constructible<NotEmpty>(); test_is_nothrow_copy_constructible<bit_zero>(); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible.pass.cpp index 84fb5f41bf1..1550dff08bb 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible.pass.cpp @@ -35,12 +35,6 @@ class Empty { }; -class NotEmpty -{ -public: - virtual ~NotEmpty(); -}; - union Union {}; struct bit_zero @@ -66,6 +60,5 @@ int main() test_is_nothrow_default_constructible<int*>(); test_is_nothrow_default_constructible<const int*>(); test_is_nothrow_default_constructible<char[3]>(); - test_is_nothrow_default_constructible<NotEmpty>(); test_is_nothrow_default_constructible<bit_zero>(); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible.pass.cpp index fc5207601e8..f5a42afe0d5 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible.pass.cpp @@ -18,8 +18,6 @@ void test_is_nothrow_move_constructible() { static_assert( std::is_nothrow_move_constructible<T>::value, ""); static_assert( std::is_nothrow_move_constructible<const T>::value, ""); - static_assert( std::is_nothrow_move_constructible<volatile T>::value, ""); - static_assert( std::is_nothrow_move_constructible<const volatile T>::value, ""); } template <class T> @@ -35,12 +33,6 @@ class Empty { }; -class NotEmpty -{ -public: - virtual ~NotEmpty(); -}; - union Union {}; struct bit_zero @@ -58,13 +50,12 @@ int main() test_has_not_nothrow_move_constructor<void>(); test_has_not_nothrow_move_constructor<A>(); - test_has_not_nothrow_move_constructor<int&>(); + test_is_nothrow_move_constructible<int&>(); test_is_nothrow_move_constructible<Union>(); test_is_nothrow_move_constructible<Empty>(); test_is_nothrow_move_constructible<int>(); test_is_nothrow_move_constructible<double>(); test_is_nothrow_move_constructible<int*>(); test_is_nothrow_move_constructible<const int*>(); - test_is_nothrow_move_constructible<NotEmpty>(); test_is_nothrow_move_constructible<bit_zero>(); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp index 5c16d4f94c6..70500f34d0d 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp @@ -13,9 +13,18 @@ #include <type_traits> +template <class T1, class T2> +struct pair +{ + T1 first; + T2 second; +}; + int main() { static_assert( std::is_standard_layout<int>::value, ""); + static_assert( std::is_standard_layout<int[3]>::value, ""); static_assert(!std::is_standard_layout<int&>::value, ""); static_assert(!std::is_standard_layout<volatile int&>::value, ""); + static_assert(( std::is_standard_layout<pair<int, double> >::value), ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp index 387789da9cd..bf833c0a95a 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp @@ -13,9 +13,19 @@ #include <type_traits> +struct A {}; + +class B +{ +public: + B(); +}; + int main() { static_assert( std::is_trivial<int>::value, ""); static_assert(!std::is_trivial<int&>::value, ""); static_assert(!std::is_trivial<volatile int&>::value, ""); + static_assert( std::is_trivial<A>::value, ""); + static_assert(!std::is_trivial<B>::value, ""); } diff --git a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp index f064d6debc3..14f19ab3980 100644 --- a/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp +++ b/libcxx/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp @@ -25,6 +25,12 @@ struct B ~B() {assert(i_ == 0);} }; +class C +{ +public: + C(); +}; + int main() { static_assert( std::is_trivially_copyable<int>::value, ""); @@ -34,4 +40,5 @@ int main() static_assert( std::is_trivially_copyable<const A>::value, ""); static_assert(!std::is_trivially_copyable<const A&>::value, ""); static_assert(!std::is_trivially_copyable<B>::value, ""); + static_assert( std::is_trivially_copyable<C>::value, ""); } |