title: Is `std::array<T, 0>` default constructible where `T` is not default constructible?
body: <p>Consider the code below:</p>
  
  <pre><code>#include &lt;array&gt;
  
  struct T
  {
      T() = delete;
  };
  
  int main()
  {
      std::array&lt;T, 0&gt; a;
      a.size();
  }
  </code></pre>
  
  <p>We default initialize a 0-sized array. Since there's no elements, no constructor of <code>T</code> should be called.</p>
  
  <p>However, <a href="https://wandbox.org/permlink/gsF3XFWZfj5U38co" rel="noreferrer">Clang</a> still requires <code>T</code> to be default constructible, while <a href="https://wandbox.org/permlink/e03RA0KAQyUhwXOq" rel="noreferrer">GCC</a> accepts the code above.</p>
  
  <p>Note that if we change the array initialization to:</p>
  
  <pre><code>std::array&lt;T, 0&gt; a{};
  </code></pre>
  
  <p><a href="https://wandbox.org/permlink/yoxXxEwrOWkdptPU" rel="noreferrer">Clang</a> accepts it this time.</p>
  
  <p>Does non-default-constructible <code>T</code> prevent <code>std::array&lt;T, 0&gt;</code> from being default-constructible?</p>