Misturando declarações constexpr e definições const

Me deparei com a seguinte situação:

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

const char Foo::s[];

Esse trecho de código é compilado com o Clang 3.7 (com-std=c++11 e-std=c++14), mas o GCC (4.8, 6.0, configurações do mesmo idioma) fornece o erro que eu esperava:

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]

eu encontreiessa velha pergunta que parece discutir a misturaconstexpr econst, mas se concentra em saber se os inicializadores são expressões constantes, em vez de definir se a definição e a declaração podem diferir em relação à constância.

É permitido fornecer a definição para umconstexpr T membro de dados estático como umconst T?

questionAnswers(1)

yourAnswerToTheQuestion