title: Empty std::array<T, 0> doesn't have constexpr begin()?
body: <p>The following code doesn't compile with clang and libc++: <a href="https://godbolt.org/z/rDL-_K" rel="noreferrer">https://godbolt.org/z/rDL-_K</a></p>
  
  <pre><code>#include &lt;array&gt;
  int main() {
      static constexpr std::array&lt;int, 0&gt; xs{};
      constexpr auto i = xs.begin();  // non-constexpr function 'begin' cannot be used in a constant expression
  
      return 0;
  }
  </code></pre>
  
  <p>But if you change the <code>0</code> to a <code>1</code>, it compiles.</p>
  
  <p>Is this a bug in libc++ or is there a good reason for it? How could I work around this if I have generic constexpr code that uses <code>begin</code>/<code>end</code>?</p>
  
  <p>(I've seen <a href="https://stackoverflow.com/questions/52972533/constexpr-begin-of-a-stdarray">this question</a>, but my example intentionally uses <code>static</code> to avoid this problem.)</p>