Unneeded conversion happening on std::move
<p>Why is the compiler thinking I am trying to convert from an object of type <code>Container</code> to an object of type <code>MoveTest</code> in the following code?  Why is the braced constructor being forwarded to the <code>move_things</code> variable?  Replacing the <code>{}</code> with <code>()</code> of course solves the problem</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;array&gt;
using namespace std;

static constexpr int NUMBER{2};

class MoveTest {
public:
  MoveTest(const MoveTest&amp;) {
    cout &lt;&lt; "MoveTest(const MoveTest&amp;)" &lt;&lt; endl;
  }
  MoveTest(MoveTest&amp;&amp;) {
    cout &lt;&lt; "MoveTest(MoveTest&amp;&amp;)" &lt;&lt; endl;
  }
  MoveTest() {
    cout &lt;&lt; "MoveTest()" &lt;&lt; endl;
  }
};

class Container {
public:
  Container() = default;
  Container(Container&amp;&amp;) = default;
  Container(const Container&amp;) = default;
  std::array&lt;MoveTest, NUMBER&gt; move_things;
};

int main() {
  Container container;
  __attribute__((unused)) Container another_one{std::move(container)};

  return 0;
}
</code></pre>

<p>The error I get is the following</p>

<pre><code>Could not convert ‘std::move&lt;Container&amp;&gt;((* &amp; container))’ from ‘std::remove_reference&lt;Container&amp;&gt;::type {aka Container}’ to ‘MoveTest`
</code></pre>

<p>Does this mean that the uniform initialization syntax is no longer an option for any class with an <code>std::array</code>?</p>

<p>The compiler and version I am using is</p>

<pre><code>g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
</code></pre>