ideas icon indicating copy to clipboard operation
ideas copied to clipboard

constexpr- и consteval-классы

Open Izaron opened this issue 3 years ago • 2 comments

Посмотрите на любую библиотеку, в которой showcase возможностей constexpr-а: frozen constexpr_all_the_things

Возникает стойкое ощущение, что классам/структурам не хватает объявления "пометь все мои функции как constexpr" или (начиная с С++20) "как consteval". Это может быть важно с модой на constexpr в последнее время.

Предлагаю иметь возможность объявлять constexpr- и consteval-классы, чтобы запись

constexpr class conststr {  // <<< пометка класса constexpr
    const char* p;
    std::size_t sz;
public:
    template<std::size_t N>
    conststr(const char(&a)[N]): p(a), sz(N - 1) {}
 
    char operator[](std::size_t n) const
    {
        return n < sz ? p[n] : throw std::out_of_range("");
    }
    std::size_t size() const { return sz; }
};

была эквивалентна

class conststr {
    const char* p;
    std::size_t sz;
public:
    template<std::size_t N>
    constexpr conststr(const char(&a)[N]): p(a), sz(N - 1) {} // <<< пометка метода constexpr
 
    constexpr char operator[](std::size_t n) const // <<< пометка метода constexpr
    {
        return n < sz ? p[n] : throw std::out_of_range("");
    }
    constexpr std::size_t size() const { return sz; } // <<< пометка метода constexpr
};

Аналогично можно ввести объявление consteval class conststr, которое будет семантически отличаться.

P. S. Надеюсь, эта идея не слишком очевидна, чтобы ее не предложил кто-то другой =)

Izaron avatar Sep 17 '21 20:09 Izaron

Так же было бы удобно, что бы все методы класса по умолчанию были const.

sergii-rybin-tfs avatar Sep 19 '21 14:09 sergii-rybin-tfs

Предложено в апреле этого года: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2350r0.pdf

Izaron avatar Sep 19 '21 22:09 Izaron