title: Why is there no piecewise tuple construction?
body: <p>The standard templates <code>std::pair</code> and <code>std::array</code> are special cases of <code>std::tuple</code>, and it stands to reason that they should have a very similar set of capabilities.</p>
  
  <p>However, uniquely among the three, <code>std::pair</code> allows for <em>piecewise construction</em>. That is, if the types <code>T1</code> and <code>T2</code> can be constructed from a set of arguments <code>a1, a2, ...</code> and <code>b1, b2, ...</code>, then morally speaking we can make a pair</p>
  
  <pre><code>"pair&lt;T1, T2&gt; p(a1, a2, ..., b1, b2, ...)"
  </code></pre>
  
  <p>directly. Practically, this is spelt out as something like this:</p>
  
  <pre><code>std::pair&lt;T1, T2&gt; p(std::piecewise_construct,
                      std::forward_as_tuple(a1, a2, ...),
                      std::forward_as_tuple(b1, b2, ...));
  </code></pre>
  
  <p><strong>Question:</strong> Why doesn't the same piecewise constructibility exist for arrays and tuples? Is there a profound reason, or is this a plain omission? For example, it would be nice to have:</p>
  
  <pre><code>std::tuple&lt;T1, T2, T3&gt; t(std::piecewise_construct,
                           std::forward_as_tuple(a1, a2, ...),
                           std::forward_as_tuple(b1, b2, ...),
                           std::forward_as_tuple(c1, c2, ...));
  </code></pre>
  
  <p>Is there a reason this cannot be done? [<em>Edit</em>: Or am I misunderstanding the purpose of piecewise construction entirely?]</p>
  
  <p>(I do really have a situation in which I would like to initialize a vector of tuples with a defaulted element value which I would prefer to construct directly from the arguments, without spelling out each tuple element type again.)</p>