diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2019-02-26 16:07:03 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2019-02-26 16:07:03 +0000 |
commit | 46c719ddcd17a483554c491ba1db817c11f01f28 (patch) | |
tree | 474cb316a2b862d5b7541ffa9b485ac7610bf022 /libcxx/test/std/utilities/meta/meta.unary | |
parent | 9e1929305c823aa94a841aabf99cc7460aca6926 (diff) | |
download | bcm5719-llvm-46c719ddcd17a483554c491ba1db817c11f01f28.tar.gz bcm5719-llvm-46c719ddcd17a483554c491ba1db817c11f01f28.zip |
Implement P1357: Traits for [Un]bounded Arrays; adopted in Kona
llvm-svn: 354891
Diffstat (limited to 'libcxx/test/std/utilities/meta/meta.unary')
-rw-r--r-- | libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp | 71 | ||||
-rw-r--r-- | libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp | 71 |
2 files changed, 142 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp new file mode 100644 index 00000000000..7a46b97fbd0 --- /dev/null +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp @@ -0,0 +1,71 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 + +// type_traits + +// is_bounded_array<T> +// T is an array type of known bound ([dcl.array]) + +#include <type_traits> + +template <class T, bool B> +void test_array_imp() +{ + static_assert( B == std::is_bounded_array<T>::value, "" ); + static_assert( B == std::is_bounded_array_v<T>, "" ); +} + +template <class T, bool B> +void test_array() +{ + test_array_imp<T, B>(); + test_array_imp<const T, B>(); + test_array_imp<volatile T, B>(); + test_array_imp<const volatile T, B>(); +} + +typedef char array[3]; +typedef char incomplete_array[]; + +class incomplete_type; + +class Empty {}; +union Union {}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +enum Enum {zero, one}; +typedef void (*FunctionPtr)(); + +int main(int, char**) +{ +// Non-array types + test_array<void, false>(); + test_array<std::nullptr_t, false>(); + test_array<int, false>(); + test_array<double, false>(); + test_array<void *, false>(); + test_array<int &, false>(); + test_array<int &&, false>(); + test_array<Empty, false>(); + test_array<Union, false>(); + test_array<Abstract, false>(); + test_array<Enum, false>(); + test_array<FunctionPtr, false>(); + +// Array types + test_array<array, true>(); + test_array<incomplete_array, false>(); + test_array<incomplete_type[], false>(); + + return 0; +} diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp new file mode 100644 index 00000000000..3a561b0b016 --- /dev/null +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp @@ -0,0 +1,71 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 + +// type_traits + +// is_unbounded_array<T> +// T is an array type of unknown bound ([dcl.array]) + +#include <type_traits> + +template <class T, bool B> +void test_array_imp() +{ + static_assert( B == std::is_unbounded_array<T>::value, "" ); + static_assert( B == std::is_unbounded_array_v<T>, "" ); +} + +template <class T, bool B> +void test_array() +{ + test_array_imp<T, B>(); + test_array_imp<const T, B>(); + test_array_imp<volatile T, B>(); + test_array_imp<const volatile T, B>(); +} + +typedef char array[3]; +typedef char incomplete_array[]; + +class incomplete_type; + +class Empty {}; +union Union {}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +enum Enum {zero, one}; +typedef void (*FunctionPtr)(); + +int main(int, char**) +{ +// Non-array types + test_array<void, false>(); + test_array<std::nullptr_t, false>(); + test_array<int, false>(); + test_array<double, false>(); + test_array<void *, false>(); + test_array<int &, false>(); + test_array<int &&, false>(); + test_array<Empty, false>(); + test_array<Union, false>(); + test_array<Abstract, false>(); + test_array<Enum, false>(); + test_array<FunctionPtr, false>(); + +// Array types + test_array<array, false>(); + test_array<incomplete_array, true>(); + test_array<incomplete_type[], true>(); + + return 0; +} |