title: Initialization of static constexpr member array in gcc 4.8
body: <p>The following code compiles and runs in gcc 4.9.1 and clang-3.6 when using -std=c++11:</p>
  
  <pre><code>struct Bar
  {
      int x;
  };
  
  struct Foo
  {
      static constexpr Bar bars[] = {1, 2, 3};
  };
  
  constexpr Bar Foo::bars[];
  </code></pre>
  
  <p>However, it fails in gcc 4.8.3, resulting in the error message</p>
  
  <pre><code>./cpptest.cpp:14:43: error: could not convert '1' from 'int' to 'const Bar'
       static constexpr Bar bars[] = {1, 2, 3};
                                             ^
  ./cpptest.cpp:14:43: error: could not convert '2' from 'int' to 'const Bar'
  ./cpptest.cpp:14:43: error: could not convert '3' from 'int' to 'const Bar'
  </code></pre>
  
  <p>Incidentally, if I do the same thing but make <code>bars</code> a static const global array, it compiles fine in gcc 4.8 and clang. It will also compile just fine if I surround each of the integer literals in the list with an extra pair of <code>{}</code>.</p>
  
  <p>So is this a bug in gcc 4.8? What does the standard say is the appropriate syntax for this? What part of the c++11 uniform initialization standard is being invoked when I omit the extra braces?</p>
  
  <p><strong>Edit:</strong> It looks like the standard says that this should invoke aggregate initialization, which should allow for "brace elision". So it seems it's a bug in gcc 4.8, that was fixed by gcc 4.9, but I'm not at all confident in my reading of the standard. I also can't seem to find any bug report in gcc's bug tracker regarding this, so I could easily be wrong.</p>