summaryrefslogtreecommitdiff
path: root/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp')
-rw-r--r--test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp b/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
new file mode 100644
index 0000000000000..6ea1cac789efb
--- /dev/null
+++ b/test/std/utilities/meta/meta.unary.prop.query/alignment_of.pass.cpp
@@ -0,0 +1,47 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+
+// alignment_of
+
+#include <type_traits>
+#include <cstdint>
+
+template <class T, unsigned A>
+void test_alignment_of()
+{
+ static_assert( std::alignment_of<T>::value == A, "");
+ static_assert( std::alignment_of<const T>::value == A, "");
+ static_assert( std::alignment_of<volatile T>::value == A, "");
+ static_assert( std::alignment_of<const volatile T>::value == A, "");
+}
+
+class Class
+{
+public:
+ ~Class();
+};
+
+int main()
+{
+ test_alignment_of<int&, 4>();
+ test_alignment_of<Class, 1>();
+ test_alignment_of<int*, sizeof(intptr_t)>();
+ test_alignment_of<const int*, sizeof(intptr_t)>();
+ test_alignment_of<char[3], 1>();
+ test_alignment_of<int, 4>();
+ test_alignment_of<double, 8>();
+#if (defined(__ppc__) && !defined(__ppc64__))
+ test_alignment_of<bool, 4>(); // 32-bit PPC has four byte bool
+#else
+ test_alignment_of<bool, 1>();
+#endif
+ test_alignment_of<unsigned, 4>();
+}