1// Copyright 2021 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/describe/enumerators.hpp>
6#include <boost/describe/enum.hpp>
7#include <boost/core/lightweight_test_trait.hpp>
8
9#if !defined(BOOST_DESCRIBE_CXX11)
10
11#include <boost/config/pragma_message.hpp>
12
13BOOST_PRAGMA_MESSAGE("Skipping test because C++11 is not available")
14int main() {}
15
16#else
17
18enum E1 { v1 };
19BOOST_DESCRIBE_ENUM(E1, v1)
20
21enum class E2 { v2 };
22BOOST_DESCRIBE_ENUM(E2, v2)
23
24BOOST_DEFINE_ENUM(E3, v3)
25BOOST_DEFINE_ENUM_CLASS(E4, v4)
26
27enum E5 { v5 };
28enum class E6 { v6 };
29
30int main()
31{
32 using boost::describe::has_describe_enumerators;
33
34#if defined(BOOST_DESCRIBE_CXX14)
35
36 BOOST_TEST_TRAIT_TRUE((has_describe_enumerators<E1>));
37 BOOST_TEST_TRAIT_TRUE((has_describe_enumerators<E2>));
38 BOOST_TEST_TRAIT_TRUE((has_describe_enumerators<E3>));
39 BOOST_TEST_TRAIT_TRUE((has_describe_enumerators<E4>));
40
41#else
42
43 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E1>));
44 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E2>));
45 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E3>));
46 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E4>));
47
48#endif
49
50 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E5>));
51 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<E6>));
52 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<int>));
53 BOOST_TEST_TRAIT_FALSE((has_describe_enumerators<void>));
54
55 return boost::report_errors();
56}
57
58#endif // !defined(BOOST_DESCRIBE_CXX11)
59

source code of boost/libs/describe/test/has_enumerators_test.cpp