Why does this C++ code output the result?
<p>This is the <code>C++</code> code:</p>

<pre><code>#include&lt;iostream&gt;
using namespace std;


int a=8;

int fun(int &amp;a)
{
    a=a*a;
    return a;
}

int main()
{

    cout &lt;&lt; a &lt;&lt; endl \
        &lt;&lt; fun(a) &lt;&lt; endl \
        &lt;&lt; a &lt;&lt; endl;
        return 0;
}
</code></pre>

<p>why does it output:</p>

<h2><code>64 64 8</code></h2>

<p>the <code>&lt;&lt;</code> operator's associativity is left to right, so why not output <code>8 64 64</code>?</p>

<p>Does it have the relation to the sequence point and the effect side? </p>
