title: Order of assignment vs order of initialization
body: <p>Take this example code:</p>
  
  <pre><code>int a = 10;
  int b = 20;
  int c = 30;
  
  int &amp; foo1() {
      qDebug() &lt;&lt; "foo1" &lt;&lt; endl;
      return a;
  }
  
  int &amp; foo2() {
      qDebug() &lt;&lt; "foo2" &lt;&lt; endl;
      return b;
  }
  
  int &amp; foo3() {
      qDebug() &lt;&lt; "foo3" &lt;&lt; endl;
      return c;
  }
  
  int main(void)
  {
      foo1() = foo2() = foo3() = 7;
  }
  </code></pre>
  
  <p>Since assignment goes right to left, I expected to see <code>foo3</code> first and <code>foo1</code> last, but it is the opposite.</p>
  
  <p>Are the rules for such scenarios concretely defined and how? Also, does the compiler differentiate between assignment and other operators and how would that be possible if you are using the <code>=</code> operator in a different context than initialization? Maybe chain assignment is treated differently from other chaining?</p>