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 ...
int
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.)