#include #include struct A {}; struct B : virtual A {}; struct Z {}; int main() { using boost::is_virtual_base_of; // A virtual base of B, returns true => ok BOOST_STATIC_ASSERT(( is_virtual_base_of< A, B >::value )); // Z not virtual base of B, yet returns true too => huh? BOOST_STATIC_ASSERT(( !is_virtual_base_of< Z, B >::value )); return 0; }