I am little confused with the applicability of reinterpret_cast vs static_cast. From what I have read the general rules are to use static cast when
reinterpret_cast
static_cast
You could use reinterprete_cast to check inheritance at compile time. Look here: Using reinterpret_cast to check inheritance at compile time