title: Why std::string concatenation operator works like right-associative one?
body: <p>Running the following MWE extracted from my pet project and compiled with GCC 4.9.1 (and 4.8.1 also)</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;sstream&gt;
  
  class InputStringStream
  {
  public:
      InputStringStream(const std::string&amp; str) : istringstream(str), currentLine() {}
      std::string readLine()
      {
          std::getline(istringstream, currentLine);
          return currentLine;
      }
  
  private:
      std::istringstream istringstream;
      std::string currentLine;
  };
  
  int main()
  {
      std::string s = std::string("line1\nline2\nline3");
      InputStringStream stream(s);
      std::cout &lt;&lt; stream.readLine() + "\n" + stream.readLine() + "\n" + stream.readLine() &lt;&lt; std::endl;
      return 0;
  }
  </code></pre>
  
  <p>produces the following output</p>
  
  <pre><code>line3
  line2
  line1
  </code></pre>
  
  <p>while I expect</p>
  
  <pre><code>line1
  line2
  line3
  </code></pre>
  
  <p>What I'm doing wrong?</p>
  
  <p>P.S. The same code compiled with Apple LLVM compiler version 5.1 produces what I expect. Visual C++ 2012 is on GCC side.</p>