title: Legitimate to initialize an array in a constexpr constructor?
body: <p>Is the following code legitimate?</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;int N&gt;
  class foo {
  public:
      constexpr foo()
      {
          for (int i = 0; i &lt; N; ++i) {
              v_[i] = i;
          }
      }
  
  private:
      int v_[N];
  };
  
  constexpr foo&lt;5&gt; bar;
  </code></pre>
  
  <p>Clang accepts it, but GCC and MSVC reject it.</p>
  
  <p>GCC's error is:</p>
  
  <pre><code>main.cpp:15:18: error: 'constexpr foo&lt;N&gt;::foo() [with int N = 5]' called in a constant expression
     15 | constexpr foo&lt;5&gt; bar;
        |                  ^~~
  main.cpp:4:15: note: 'constexpr foo&lt;N&gt;::foo() [with int N = 5]' is not usable as a 'constexpr' function because:
      4 |     constexpr foo()
        |               ^~~
  main.cpp:4:15: error: member 'foo&lt;5&gt;::v_' must be initialized by mem-initializer in 'constexpr' constructor
  main.cpp:12:9: note: declared here
     12 |     int v_[N];
        |         ^~
  </code></pre>
  
  <p>If this kind of code were OK, I could cut quite a few uses of <code>index_sequence</code>s.</p>