https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106610
Bug ID: 106610
Summary: elements_view::iterator::iterator_category invokes the
operator*() && of the underlying iterator
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: hewillk at gmail dot com
Target Milestone: ---
#include <ranges>
struct I {
using difference_type = std::ptrdiff_t;
using value_type = std::pair<int, double>;
value_type& operator*() const &;
void operator*() && = delete;
I& operator++();
I operator++(int);
bool operator==(const I&) const;
};
int main() {
std::ranges::input_range auto r = std::ranges::subrange(I{},
std::unreachable_sentinel);
auto e = r | std::views::keys;
}
https://godbolt.org/z/oW8dP56zv