You are using personal inheritance, so you cannot use dynamic_cast to determine if one class is derived from another. However, you can use std::is_base_of , which will tell you this at compile time:
#include <type_traits> class Foo {}; class Bar : Foo {}; class Baz {}; int main() { std::cout << std::boolalpha; std::cout << std::is_base_of<Foo, Bar>::value << '\n'; // true std::cout << std::is_base_of<Bar,Foo>::value << '\n'; // false std::cout << std::is_base_of<Bar,Baz>::value << '\n'; // false }
source share