title: std::tuple default constructor with move-constructable element
body: <p>I'm trying to return a <code>std::tuple</code> containing an element that is a non-copy-constructable type. This seems to prevent me from using the default class constructor to construct the tuple. For example, to return a tuple containing <code>Foo</code>, a <code>foo</code> instance must be created and <code>std::move</code>d:</p>
  
  <pre><code>class Foo {
    public:
      Foo(const Foo&amp;) = delete;
      Foo(Foo&amp;&amp;) = default;
      int x;
  };
  
  tuple&lt;int, Foo&gt; MakeFoo() {
      Foo foo{37};
  //  return {42, {37}}; // error: could not convert ‘{42, {37}}’ from ‘’ to ‘std::tuple’
      return {42, std::move(foo)};
  }
  </code></pre>
  
  <p>On the other hand, if the class is defined to have a copy constructor, construction of the tuple works fine:</p>
  
  <pre><code>class Bar {
    public:
      Bar(const Bar&amp;) = default;
      int x;
  };
  
  tuple&lt;int, Bar&gt; MakeBar() {
      return {42, {37}}; // compiles ok
  }
  </code></pre>
  
  <p><strong>Is there a way to use the <code>MakeBar</code> syntax with the <code>Foo</code> class?</strong></p>