title: Use of std::move in std::accumulate
body: <p>In my Fedora 34 environment (g++), <code>std::accumulate</code> is defined as:</p>
  <pre><code>template&lt;typename ITER, typename T&gt;
  constexpr inline T accumulate(ITER first, ITER last, T init)
  {
    for (; first != last; ++first)
        init = std::move(init) + *first; // why move ?
  
    return init;
  }
  </code></pre>
  <p>If the expression <code>init + *first</code> is already an rvalue, what is the purpose of <code>std::move</code> ?</p>