title: When virtual inheritance IS a good design?
body: <p>EDIT3: Please be sure to clearly understand what I am asking before answering (there are EDIT2 and lots of comments around). There are (or were) many answers which clearly show misunderstanding of the question (I know that's also my fault, sorry for that)</p>
  
  <p>Hi, I've looked over the questions on virtual inheritance (<code>class B: public virtual A {...}</code>) in C++, but did not find an answer to my question.</p>
  
  <p>I know that there are some issues with virtual inheritance, but what I'd like to know is in which cases virtual inheritance would be considered a <em>good</em> design.</p>
  
  <p>I saw people mentioning interfaces like <code>IUnknown</code> or <code>ISerializable</code>, and also that <code>iostream</code> design is based on virtual inheritance. Would those be good examples of a good use of virtual inheritance, is that just because there is no better alternative, or because virtual inheritance <em>is</em> the proper design in this case? Thanks.</p>
  
  <p>EDIT: To clarify, I'm asking about real-life examples, please don't give abstract ones. I know what virtual inheritance is and which inheritance pattern requires it, what I want to know is when it is the good way to do things and not just a consequence of complex inheritance.</p>
  
  <p>EDIT2: In other words, I want to know when the diamond hierarchy (which is the reason for virtual inheritance) <strong>is a good design</strong></p>