Следующий код правильно собирается в clang ++
class Number
{
int _value;
public:
constexpr Number(int value): _value(value) {}
constexpr bool operator==(const Number rhs) const { return _value == rhs._value; }
constexpr bool isOne() const { return *this == Number::ONE; }
static const Number ONE;
};
constexpr Number Number::ONE(1);
int main()
{
return 0;
}
, но не работает в gcc ++. Возвращаемая ошибка следующая:
Error(s):
266649471/source.cpp: In member function ‘constexpr bool Number::isOne() const’:
266649471/source.cpp:11:65: error: the value of ‘Number::ONE’ is not usable in a constant expression
constexpr bool isOne() const { return *this == Number::ONE; }
^
266649471/source.cpp:13:25: note: ‘Number::ONE’ was not declared ‘constexpr’
static const Number ONE;
^~~
Кто здесь? Любой обходной путь для объявления Number :: ONE constexpr внутри Number ?