title: Why shouldn't you `std::move(*const_cast<T*>(ele))` the elements of a `std::initializer_list`?
body: <p><code>std::initializer_list&lt;T&gt;</code> allocates a temporary array <code>T[]</code> whose elements are copied from  with the list-initializer. It's <code>begin</code> and <code>end</code> methods return <code>const T*</code>. This makes it so that you can't move the elements and you perform yet another copy. However, it's trivial to do</p>
  
  <pre><code>Vector(std::initializer_list&lt;T&gt; IL) :Size{IL.size()}, :Storage{new T[size]} {
      T* slot = Storage;
      for (auto ele = IL.begin(); ele != IL.end(); ele++, slot++)
          *slot = std::move(*const_cast&lt;T*&gt;(ele));
  }
  </code></pre>
  
  <p>I'm sure there's some valid reason why <code>std::initializer_list&lt;T&gt;::begin</code> returns a <code>const T*</code> and thus you shouldn't do what's shown above but I don't see it. </p>