4

You can use std::is_base_of to check if a class inherits from some base class, but how do I know if a class doesn't directly inherit from that class (i.e inherits indirectly from that class)?

Kijewski
  • 25,517
  • 12
  • 101
  • 143
template boy
  • 10,230
  • 8
  • 61
  • 97
  • Are you saying that if `Derived1` inherits from `Base`, and `Derived2` inherits from `Derived1`, you want something that returns `false` given `Derived1` and `Derived2` but returns `true` given `Base` and `Derived2`? – R Sahu Oct 17 '14 at 19:08
  • @RSahu Yes. And I am open to C++11 solutions if they are possible. The answer in the duplicate is good too. – template boy Oct 17 '14 at 19:08
  • This is **not** a duplicate of the other question. If anything the opposite. BTW, `is_base_of` does not only detect direct bases, IIRC – David Rodríguez - dribeas Oct 17 '14 at 20:31
  • 1
    [`std::is_convertible`](http://en.cppreference.com/w/cpp/types/is_convertible) is not enough I guess? – Kijewski Oct 17 '14 at 20:47
  • [N2965](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2965.html) introduces the `bases` and `direct_bases` metafunctions ([discussed before](http://stackoverflow.com/q/18435001/33732)), which would make your goal pretty easy to implement. [Support apparently already exists in GCC.](http://stackoverflow.com/a/16262354/33732) – Rob Kennedy Oct 17 '14 at 21:08

1 Answers1

1

It is impossible until N2965 is implemented.