Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 73859

C++ constexpr + static member того же класса

$
0
0

Хочется реализовать что-то типа:

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

 , ,


Viewing all articles
Browse latest Browse all 73859

Trending Articles