Warum benötigt das statische constexpr-Element (der Typklasse) eine Definition?

==> Den vollständigen Code und die Zusammenstellung finden Sie unter coliru.

Ich habe ein LiteralType Klasse Füllungconstexpr Anforderunge:

struct MyString
{
    constexpr MyString(char const* p, int s) : ptr(p), sz(s) {}
    constexpr char const* data() const { return ptr; }
    constexpr int         size() const { return sz;  }

    char const *ptr = 0;
    int  const  sz  = 0;
};

Ich benutze es alsconstexpr static Mitgliedsvariable:

struct Foo
{
    int size() { return str_.size(); }

    constexpr static MyString str_{"ABC",3};
};

int main()
{
  Foo foo;
  return ! foo.size();
}

Aber der Linker sagt:
(Clang-3.5 und GCC-4.9)

undefined reference to `Foo::str_'

Ich muss das @ definierconstexpr static member!
(Ich gebe die Konstruktorparameter nicht an)

constexpr MyString Foo::str_;

Jedoch wenn dasconstexpr static Mitglied war einint Das Mitglied muss nicht außerhalb der Klassendefinition definiert werden. Das ist mein Verständnis, aber ich bin nicht sicher ...

FragenWarumint muss nicht außerhalb der Klassendeklaration definiert werden, sondernMyString benötigt das? Gibt es einen Nachteil, ein @ zu definierconstexpr static Mitglied in einer Header-Datei?
(Ich stelle meine Bibliothek nur als Header-Dateien zur Verfügung.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage