is_virtual_base_of_test.cpp: add more tests for tricky cases and bug reports.

This commit is contained in:
jzmaddock
2018-05-09 19:31:45 +01:00
parent 63dea93d99
commit 770c095dcc

View File

@ -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<Derived,Base>::value), false);
@ -87,7 +132,16 @@ BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<non_virtual_base,non_vir
//
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<bug11309_A, bug11309_C>::value), false);
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<bug11309_A, bug11309_B>::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<bug11323_B, bug11323_C>::value), false);
#ifndef BOOST_NO_CXX11_FINAL
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<bug11323_2B, bug11323_2C>::value), false);
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<non_virtual_base, final_non_virtual_derived>::value), false);
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<non_virtual_base, final_virtual_derived>::value), true);
#endif
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<non_virtual_base, protected_virtual_derived>::value), true);
BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_virtual_base_of<non_virtual_base, private_virtual_derived>::value), true);
#endif
TT_TEST_END