Хочется реализовать что-то типа:
class Foo {
public:
constexpr Foo(const int value) : value(value) {}
constexpr static Foo UNKNOWN = std::numeric_limits<int>::max();
constexpr static Foo ANY = UNKNOWN - 1;
private:
int value;
};
Естественно, такой код не собирается, поскольку на момент обьявления constexpr UNKNOWN/ANY тип Foo eще недоконца определен: http://ideone.com/gwCkln
prog.cpp:7:66: error: 'constexpr const Foo Foo::UNKNOWN' has incomplete type
constexpr static Foo UNKNOWN = std::numeric_limits<int>::max();
^
prog.cpp:8:46: error: 'constexpr const Foo Foo::ANY' has incomplete type
constexpr static Foo ANY = UNKNOWN - 1;
^
Логика компилятора понятна, но ведь статические члены класса не влияют на размер обьекта, а значит ситуацию с куска кода выше теоретически можно разрулить.
Подскажите, можно ли в данной ситуации как-то использовать constexpr
а не const
.
P.S. Использую g++ 5.3 с -std=c++14