enum.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//===----------------------------------------------------------------------===//
2326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//
3326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//                     The LLVM Compiler Infrastructure
4326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//
5326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek// This file is distributed under the University of Illinois Open Source
6326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek// License. See LICENSE.TXT for details.
7326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//
8326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek//===----------------------------------------------------------------------===//
9326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek
10ba243b59a1074e0962f6abfa3bb9aa984eac1245David Blaikie// type_traits
11ba243b59a1074e0962f6abfa3bb9aa984eac1245David Blaikie
12326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek// enum
13326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek
14326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek#include <type_traits>
15326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek
16326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenektemplate <class T>
17326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenekvoid test_enum_imp()
18326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek{
19b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek    static_assert(!std::is_void<T>::value, "");
2030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth    static_assert(!std::is_integral<T>::value, "");
21326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_floating_point<T>::value, "");
22326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_array<T>::value, "");
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    static_assert(!std::is_pointer<T>::value, "");
24326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_lvalue_reference<T>::value, "");
25326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_rvalue_reference<T>::value, "");
26326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_member_object_pointer<T>::value, "");
27326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_member_function_pointer<T>::value, "");
28af13d5b25b360e698cc1cf1055ad7d14e008e505Ted Kremenek    static_assert( std::is_enum<T>::value, "");
29283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek    static_assert(!std::is_union<T>::value, "");
30326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek    static_assert(!std::is_class<T>::value, "");
31a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek    static_assert(!std::is_function<T>::value, "");
32326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenek}
33db34ab70961ca4b24b600eb47053d7af304659f5Tom Care
34326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenektemplate <class T>
35326be568e2cb04285c84e6e26a3e6b3822607361Ted Kremenekvoid test_enum()
367fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek{
371d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek    test_enum_imp<T>();
38ba243b59a1074e0962f6abfa3bb9aa984eac1245David Blaikie    test_enum_imp<const T>();
39b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek    test_enum_imp<volatile T>();
40c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu    test_enum_imp<const volatile T>();
41c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu}
42a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek
431d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenekenum Enum {zero, one};
44a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek
45a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenekint main()
46a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek{
47a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek    test_enum<Enum>();
48a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek}
49ba243b59a1074e0962f6abfa3bb9aa984eac1245David Blaikie