title: Diamond sub-problem: non-multiple inheritance in side branch still require class constructor
body: <p>Strange problem occurred when I tried to "solve" usual diamond problem in a usual way - using virtual inheritance:</p>
  
  <pre><code>  A
   / \* both virtual
  B   C
   \ /
    D
  </code></pre>
  
  <p>However my base class A doesn't have default constructor, so I was to call it manually from D. However when I try to add a class E into this diamond as C-inherited</p>
  
  <pre><code>  A
   / \* both virtual
  B   C
   \ / \
    D   E
  </code></pre>
  
  <p>it is still needed to call constructor of A in E constructor manually, i.e. C doesn't what to create A from E even though there is neither multiple inheritance nor diamond A-C-E.</p>
  
  <pre><code>class A                     
     {public: 
        A (int _N): N(_N) {};
        void show()
          {cout&lt;&lt;"A"&lt;&lt;N;} 
      protected:
        int N;
     }; 
  class B: public virtual A   
     { public: 
         B(int n): A(2*n) {};
         void show()
          { cout&lt;&lt;"B"&lt;&lt;N;} 
     }; 
  class C: public virtual A   
     { public: 
         C(int n): A(3*n) {};
         void show()
          { cout&lt;&lt;"C"&lt;&lt;N;} 
     }; 
  class D: public B,C 
     { public: 
         D(): B(1), C(2), A(3) {};
         void show()
          { cout&lt;&lt;"D"&lt;&lt;N;} 
     }; 
  
  class E: public virtual C
     { public:
         E(): C(1) {};
         void show()
          { cout&lt;&lt;"E"&lt;&lt;N;} 
     }; 
  
  int main()
    {D d;       // OK
     A *a = &amp;d; 
     a-&gt;show(); 
  
     E e;        // NOT OK, no function A::A() to call in E::E()
     A *a2 = &amp;e;
     a2-&gt;show();
     return 0;
    } 
  </code></pre>
  
  <p>Is it possible to solve this issue without calling constructor of A from E? I need C to do it properly :-). </p>
  
  <p>Or is it possible not to try to solve diamond problem at all:</p>
  
  <pre><code>A   A
  |   |  no virtual at all
  B   C
   \ / \
    D   E
  </code></pre>
  
  <p>and still try to declare object of class D with two instances of A but telling compiler to use A of C when colling from D each time? When I try to add</p>
  
  <pre><code>using C::A
  </code></pre>
  
  <p>into the declaration of D it still produce error of unambiguous base A.</p>