Composition or Private Inheritance for Implementing Builder?
Herb Sutter in his book 'Exceptional C++', Item 24 (Uses and Abuses of Inheritance), discusses the issue, and cites the following reasons for using private inheritance (instead of containment):


Override a virtual function
Access to a protected member
Construct the used object before, or destroy it after, another base sub-object
Share a common virtual base class or override the construction of a virtual base class
We benefit substantially from the empty base class optimization
We need "controlled polymorphism" - LSP IS-A, but in certain code only


If one of these situations applies, then you must use private inheritance.  Otherwise, containment is preferred.

The last of these reasons is cited as a possible reason for protected inheritance.

He also comments:


  That's as complete a list as I can make of the reasons to use non-public inheritance.  (In fact, just one additional point would make this a complete list of all reasons to use any kind of inheritance: We need public inheritance to express IS-A. [...])


The item occupies 8 pages.