https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112490

Chameleon <gessos.paul at yahoo dot gr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |gessos.paul at yahoo dot gr

--- Comment #4 from Chameleon <gessos.paul at yahoo dot gr> ---
The same (14.2):
https://godbolt.org/z/MhM6Yqfo4



#include <concepts>
#include <iterator>

using namespace std;

template <class Iter>
struct permutated_iterator
{
    Iter iter{};
    constexpr permutated_iterator(Iter iter) noexcept : iter(iter) { }
    constexpr bool operator==(const permutated_iterator& rhs) const noexcept {
return iter == rhs.iter; }
    constexpr auto operator<=>(const permutated_iterator& rhs) const noexcept {
return iter <=> rhs.iter; }
};

int main()
{
    using piter = unsigned int*;
    using cpiter = std::basic_const_iterator<piter> ;
    using iter1 = permutated_iterator<piter> ;
    using iter2 = permutated_iterator<std::basic_const_iterator<unsigned
int*>>;
    static_assert(std::totally_ordered<piter>);
    static_assert(std::totally_ordered<cpiter>);
    static_assert(std::totally_ordered<iter1>);
    static_assert(std::totally_ordered<iter2>);   // PROBLEM!!!!

    // this is ok: iter2() == iter2()
    // this is not ok: iter2() > iter2()

Reply via email to