// Copyright 2020, 2021 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include struct X1 { enum E { v1 = 5 }; BOOST_DESCRIBE_NESTED_ENUM(E, v1) }; class X2 { private: enum E { v1, v2 }; BOOST_DESCRIBE_NESTED_ENUM(E, v1, v2) public: typedef E E2; }; #if !defined(BOOST_DESCRIBE_CXX11) #include BOOST_PRAGMA_MESSAGE("Skipping test because C++11 is not available") int main() {} #else struct X3 { enum class E { v1 = 7 }; BOOST_DESCRIBE_NESTED_ENUM(E, v1) }; class X4 { private: enum class E { v1, v2 }; BOOST_DESCRIBE_NESTED_ENUM(E, v1, v2) public: typedef E E2; }; #if !defined(BOOST_DESCRIBE_CXX14) #include BOOST_PRAGMA_MESSAGE("Skipping test because C++14 is not available") int main() {} #else #include using namespace boost::mp11; int main() { { using D = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 1 ); BOOST_TEST_EQ( (mp_at_c::value), X1::v1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v1" ); } { using D = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 2 ); BOOST_TEST_EQ( (mp_at_c::value), 0 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v1" ); BOOST_TEST_EQ( (mp_at_c::value), 1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v2" ); } { using D = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 1 ); BOOST_TEST_EQ( (int)(mp_at_c::value), (int)X3::E::v1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v1" ); } { using D = boost::describe::describe_enumerators; BOOST_TEST_EQ( mp_size::value, 2 ); BOOST_TEST_EQ( (int)(mp_at_c::value), 0 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v1" ); BOOST_TEST_EQ( (int)(mp_at_c::value), 1 ); BOOST_TEST_CSTR_EQ( (mp_at_c::name), "v2" ); } return boost::report_errors(); } #endif // !defined(BOOST_DESCRIBE_CXX14) #endif // !defined(BOOST_DESCRIBE_CXX11)