title: Why are these snippets handled differently by GCC?
body: <p>The first snippet compiles without any warnings (<a href="https://goo.gl/Jgo7TO" rel="noreferrer">live example</a>):</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  struct A {
    constexpr A(): i(5){}
    constexpr operator int() { return 5; }
    int i;
  };
  
  int main() {
      A a;
      int b[a]{ 0, 1, 2, 3, 4 };
      std::cout &lt;&lt; b[4] &lt;&lt; '\n';
  }
  </code></pre>
  
  <p>Now alter the above snippet by returning <code>i</code> in the conversion operator (<a href="https://goo.gl/JB6MsK" rel="noreferrer">live example</a>):</p>
  
  <pre><code>constexpr operator int() { return i; }
  </code></pre>
  
  <p>GCC warns that <code>b</code> is a VLA.</p>
  
  <p>To me, both variants seem to conform to paragraph §5.19 [expr.const]/3 in C++14.</p>