title: Why should you check if Base is a private or protected base of Derived?
body: <p>The only difference between <code>std::is_base_of&lt;Base, Derived&gt;</code> and <code>std::is_convertible&lt;Derived*, const volatile Base*&gt;</code> is that the former is true also when <code>Base</code> is a <strong>private or protected</strong> base class of <code>Derived</code>. But, when do you really need to know if <code>Base</code> is a private or protected base? Why should the user care about internal implementation of a class?</p>