1// Copyright 2020 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/endian/detail/is_scoped_enum.hpp>
6#include <boost/core/lightweight_test_trait.hpp>
7#include <boost/config.hpp>
8
9enum E1 {};
10
11#if !defined(BOOST_NO_CXX11_SCOPED_ENUMS)
12
13enum E2: long {};
14enum class E3 {};
15enum class E4: long {};
16
17#endif
18
19struct X
20{
21 operator int() const { return 0; }
22};
23
24struct Y;
25
26template<class T> void test_true()
27{
28 using boost::endian::detail::is_scoped_enum;
29
30 BOOST_TEST_TRAIT_TRUE((is_scoped_enum<T>));
31 BOOST_TEST_TRAIT_TRUE((is_scoped_enum<T const>));
32 BOOST_TEST_TRAIT_TRUE((is_scoped_enum<T volatile>));
33 BOOST_TEST_TRAIT_TRUE((is_scoped_enum<T const volatile>));
34}
35
36template<class T> void test_false()
37{
38 using boost::endian::detail::is_scoped_enum;
39
40 BOOST_TEST_TRAIT_FALSE((is_scoped_enum<T>));
41 BOOST_TEST_TRAIT_FALSE((is_scoped_enum<T const>));
42 BOOST_TEST_TRAIT_FALSE((is_scoped_enum<T volatile>));
43 BOOST_TEST_TRAIT_FALSE((is_scoped_enum<T const volatile>));
44}
45
46template<class T> void test_false_()
47{
48 using boost::endian::detail::is_scoped_enum;
49
50 BOOST_TEST_NOT((is_scoped_enum<T>::value));
51 BOOST_TEST_NOT((is_scoped_enum<T const>::value));
52 BOOST_TEST_NOT((is_scoped_enum<T volatile>::value));
53 BOOST_TEST_NOT((is_scoped_enum<T const volatile>::value));
54}
55
56int main()
57{
58 test_false<int>();
59 test_false<bool>();
60 test_false<X>();
61 test_false_<Y>();
62 test_false<void>();
63 test_false<int[]>();
64 test_false<int[1]>();
65
66 test_false<E1>();
67
68#if !defined(BOOST_NO_CXX11_SCOPED_ENUMS)
69
70 test_false<E2>();
71
72 test_true<E3>();
73 test_true<E4>();
74
75#endif
76
77 return boost::report_errors();
78}
79

source code of boost/libs/endian/test/is_scoped_enum_test.cpp