summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/meta/meta.unary
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2019-02-26 16:07:03 +0000
committerMarshall Clow <mclow.lists@gmail.com>2019-02-26 16:07:03 +0000
commit46c719ddcd17a483554c491ba1db817c11f01f28 (patch)
tree474cb316a2b862d5b7541ffa9b485ac7610bf022 /libcxx/test/std/utilities/meta/meta.unary
parent9e1929305c823aa94a841aabf99cc7460aca6926 (diff)
downloadbcm5719-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.cpp71
-rw-r--r--libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp71
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;
+}
OpenPOWER on IntegriCloud