Mischen von constexpr-Deklarationen und const-Definitionen

Ich bin auf folgende Situation gestoßen:

struct Foo
{
    static constexpr char s[] = "Hello world";
};

const char Foo::s[];

Dieses Code-Snippet kompiliert mit Clang 3.7 (mit-std=c++11 und-std=c++14), aber GCC (4.8, 6.0, gleiche Spracheinstellungen) gibt den Fehler, den ich erwartet hätte:

GCC 4.8:

in.cpp:6:19: error: redeclaration ‘Foo::s’ differs in ‘constexpr’
 const char Foo::s[];
                   ^
in.cpp:3:27: error: from previous declaration ‘Foo::s’
     static constexpr char s[] = "Hello world";
                           ^
in.cpp:6:19: error: declaration of ‘constexpr const char Foo::s [12]’ outside of class is not definition [-fpermissive]
 const char Foo::s[];

GCC 6.0:

‘constexpr’ needed for in-class initialization of static data member ‘const char Foo::s [12]’ of non-integral type [-fpermissive]

Ich fanddiese alte Frage das scheint zu diskutieren Mischenconstexpr undconst, aber es geht darum, ob Initialisierer konstante Ausdrücke sind, sondern ob Definition und Deklaration sich in Bezug auf die Konstanz unterscheiden können.

Ist es erlaubt die Definition für ein @ anzugebconstexpr T statisches Datenelement alsconst T?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage