title: C++ standard: why are some "orders" defined and some not?
body: <ol>
  <li>Having a class, the initialization order of its members is strongly defined in constructor (maybe to allow dependencies between members, like in this <a href="https://stackoverflow.com/questions/8808883/initialization-order-issues">question</a> - but I think this is more a design problem, I can imagine circular dependencies). </li>
  <li>Having a function call, the order of parameters evaluation isn't defined, I think it's for C compatibility. </li>
  <li><p>And we have an error for the following "dreaded diamond" problem:</p>
  
  <pre><code>struct A {virtual void Print() {}};
  struct B: virtual public A {virtual void Print() {}};
  struct C: virtual public A {virtual void Print() {}};
  struct D: public B, public C {};
  </code></pre>
  
  <p>The compiler doesn't know which version to choose, the order being defined as ambiguous. Why simply not use a "left-to-right depth first resolution order" as defined in this <a href="https://stackoverflow.com/questions/6704332/c-resolving-the-diamond-problem">question</a> (with an unconvincing answer), namely to choose B over C?</p></li>
  </ol>
  
  <p>So why these different approaches? Why there's a strict order for 1 and not for 3? Wasn't more simple to keep 1 undefined? Or 2 simply defined as left-to-rigth?</p>