// Copyright 2021 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #if !defined(BOOST_DESCRIBE_CXX14) #include BOOST_PRAGMA_MESSAGE("Skipping test because C++14 is not available") int main() {} #else #include #include #include struct X1 { }; struct X2 { }; struct X3 { }; struct V1 { V1(int); }; struct V2 { V2(int); }; struct V3 { V3(int); }; struct Y: public X1, protected X2, private X3, public virtual V1, protected virtual V2, private virtual V3 { }; struct Z final: public X1, protected X2, private X3, public virtual V1, protected virtual V2, private virtual V3 { }; int main() { using namespace boost::describe::detail; using namespace boost::describe; BOOST_TEST( (is_public_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_public ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (is_protected_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_protected ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private ); BOOST_TEST( (is_public_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_public | mod_virtual ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (is_protected_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_protected | mod_virtual ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private | mod_virtual ); BOOST_TEST( (is_public_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_public ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (!is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private ); BOOST_TEST( (is_public_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_public | mod_virtual ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private | mod_virtual ); BOOST_TEST( (!is_public_base_of::value) ); BOOST_TEST( (!is_protected_base_of::value) ); BOOST_TEST( (is_virtual_base_of::value) ); BOOST_TEST_EQ( (compute_base_modifiers()), mod_private | mod_virtual ); return boost::report_errors(); } #endif // !defined(BOOST_DESCRIBE_CXX14)