 <p>Your problem is that <code>animal</code> is a <strong>private</strong> base class of <code>human</code> and therefore passing (and storing) <code>this</code> (which is of type <code>lady*</code>) can not be used to call the method from <code>animal</code>. You could fix it making it a public base or by adding a method to <code>human</code>:</p> <pre><code>animal* animal_ptr() { return this; } </code></pre> <p>and later bind:</p> <pre><code>std::bind(&amp;base_type::eat, animal_ptr(), std::placeholders::_1) </code></pre> <p><a href="http://coliru.stacked-crooked.com/a/86aa3493784bdb9a" rel="nofollow"><strong>Live example</strong></a></p>