ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Sentinels should not be required to be default constructible

Open Makcal opened this issue 7 months ago • 1 comments

Заменить

template< class S, class I >
    concept sentinel_for =
        std::semiregular<S> &&
        std::input_or_output_iterator<I> &&
        __WeaklyEqualityComparableWith<S, I>;

на

template< class S, class I >
    concept sentinel_for =
        std::copyable<S> &&
        std::input_or_output_iterator<I> &&
        __WeaklyEqualityComparableWith<S, I>;

, тем самым убрав требование на default constructible, тем же образом, каким P2325R3 убрало это требование из итераторов. Аналогично P2325R3, в этом требовании нет особого смысла, но зато итераторы, возвращаемые из .end(), которые не являются default constructible, не могут быть использованы в std::ranges::end, что мешает некоторым диапазонам удовлетворять std::ranges::range (я лично столкнулся с этим в библиотеке sqlpp11).

Makcal avatar May 12 '25 22:05 Makcal