Почему статический член constexpr (типа class) требует определения?
==> Смотрите полный код и компиляцию наcoliru.
у меня естьLiteralType заполнение классаconstexpr
требования:
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;
};
Я использую это какconstexpr static
переменная-член:
struct Foo
{
int size() { return str_.size(); }
constexpr static MyString str_{"ABC",3};
};
int main()
{
Foo foo;
return ! foo.size();
}
Но компоновщик говорит:
(Clang-3.5 и GCC-4.9)
undefined reference to `Foo::str_'
Я должен определитьconstexpr static
член!
(Я не указываю параметры конструктора)
constexpr MyString Foo::str_;
Однако еслиconstexpr static
участник былint
член не должен быть определен вне определения класса. Это мое понимание, но я не уверен ...
int
не нужно определять вне объявления класса, ноMyString
требует этого?Есть ли недостаток, чтобы определитьconstexpr static
член в заголовочном файле?(Я предоставляю свою библиотеку только в качестве заголовочных файлов)