title: Fold with string array
body: <p>I tried some code like this:</p>
  <pre><code>fn main() {
     let a = vec![&quot;May&quot;, &quot;June&quot;];
     let s = a.iter().fold(&quot;&quot;, |s2, s3|
        s2 + s3
     );
     println!(&quot;{}&quot;, s == &quot;MayJune&quot;);
  }
  </code></pre>
  <p>Result:</p>
  <pre><code>error[E0369]: cannot add `&amp;&amp;str` to `&amp;str`
   --&gt; a.rs:4:10
    |
  4 |       s2 + s3
    |       -- ^ -- &amp;&amp;str
    |       |  |
    |       |  `+` cannot be used to concatenate two `&amp;str` strings
    |       &amp;str
    |
  help: `to_owned()` can be used to create an owned `String` from a string
  reference. String concatenation appends the string on the right to the string
  on the left and may require reallocation. This requires ownership of the string
  on the left
    |
  4 |       s2.to_owned() + s3
    |       ^^^^^^^^^^^^^
  </code></pre>
  <p>Ok, fair enough. So I change my code to exactly that. But then I get this:</p>
  <pre><code>error[E0308]: mismatched types
   --&gt; a.rs:4:7
    |
  4 |       s2.to_owned() + s3
    |       ^^^^^^^^^^^^^^^^^^
    |       |
    |       expected `&amp;str`, found struct `std::string::String`
    |       help: consider borrowing here: `&amp;(s2.to_owned() + s3)`
  </code></pre>
  <p>Ok, fair enough. So I change my code to exactly that. But then I get this:</p>
  <pre><code>error[E0515]: cannot return reference to temporary value
   --&gt; a.rs:4:7
    |
  4 |       &amp;(s2.to_owned() + s3)
    |       ^--------------------
    |       ||
    |       |temporary value created here
    |       returns a reference to data owned by the current function
  </code></pre>
  <p>Why is Rust giving bogus suggestion, and is what I am trying to do possible? Note, I would prefer to avoid suggestions such as &quot;just use <code>join</code>&quot; or similar, as this question is intended to address a more generic problem. Rust version:</p>
  <pre><code>rustc 1.46.0 (04488afe3 2020-08-24)
  </code></pre>