diff --git a/test/is_virtual_base_of_test.cpp b/test/is_virtual_base_of_test.cpp index bda0e59..16707a0 100644 --- a/test/is_virtual_base_of_test.cpp +++ b/test/is_virtual_base_of_test.cpp @@ -45,6 +45,51 @@ struct bug11309_A { int a; }; struct bug11309_B : public virtual bug11309_A {}; struct bug11309_C : public bug11309_A { virtual ~bug11309_C() {} }; +struct bug11323_A { virtual void foo() {} }; +struct bug11323_B : public virtual bug11323_A { virtual void foo() {} }; +struct bug11323_C : public bug11323_B {}; + +#ifndef BOOST_NO_CXX11_FINAL + +struct bug11323_2A { virtual void foo() = 0; }; +struct bug11323_2B : public virtual bug11323_2A { void foo() override {} }; +struct bug11323_2C : public bug11323_2B {}; + + +class final_non_virtual_derived final : public non_virtual_base +{ +public: + final_non_virtual_derived(); + virtual int Y(); + virtual int X(); +}; + +class final_virtual_derived final : public virtual non_virtual_base +{ +public: + final_virtual_derived(); + virtual int Y(); + virtual int X(); +}; + +#endif + +class protected_virtual_derived : protected virtual non_virtual_base +{ +public: + protected_virtual_derived(); + virtual int Y(); + virtual int X(); +}; + +class private_virtual_derived : private virtual non_virtual_base +{ +public: + private_virtual_derived(); + virtual int Y(); + virtual int X(); +}; + TT_TEST_BEGIN(is_virtual_base_of) BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); @@ -87,7 +132,16 @@ BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), true); - +#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_CXX11_NULLPTR) +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); +#ifndef BOOST_NO_CXX11_FINAL +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), true); +#endif +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of::value), true); +#endif TT_TEST_END