title: What is the difference between these two cases of adding a string?
body: <p>I noticed that when I initialized a string, the compiler reported an error that I was not expecting.</p>
  
  <p><strong><em>For example:</em></strong></p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  
  using namespace std;
  
  int main() {
      string s1 = "Hello", s2 = "World!"; // ok
      string s3 = s1 + ", " + "World!"; // ok
      string s4 = "Hello" + ", " + s2; // error
      cout &lt;&lt; s1 + " " + s2 &lt;&lt; endl; //ok
      return 0;
  }
  </code></pre>
  
  <p>For me, if <code>s3</code> worked just fine, <code>s4</code> should do the same.</p>
  
  <p><strong>Why do I get that error?  What is the difference between these two initialization strings (<code>s3</code> and <code>s4</code>)?</strong></p>