begin.cc:4:30: error: no match for call to ‘(const std::ranges::__cust_access::_Begin) (S&)’ 4 | auto x = std::ranges::begin(s); | ^ In file included from /home/patrick/code/gcc-master/libstdc++-v3/include/std/string:54, from /home/patrick/code/gcc-master/libstdc++-v3/include/bits/locale_classes.h:40, from /home/patrick/code/gcc-master/libstdc++-v3/include/bits/ios_base.h:41, from /home/patrick/code/gcc-master/libstdc++-v3/include/std/streambuf:41, from /home/patrick/code/gcc-master/libstdc++-v3/include/bits/streambuf_iterator.h:35, from /home/patrick/code/gcc-master/libstdc++-v3/include/std/iterator:66, from /home/patrick/code/gcc-master/libstdc++-v3/include/std/ranges:44, from begin.cc:1: /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:418:2: note: candidate: ‘constexpr auto std::ranges::__cust_access::_Begin::operator()(_Tp&&) const [with _Tp = S&]’ 418 | operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) | ^~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:418:2: note: constraints not satisfied begin.cc: In instantiation of ‘constexpr auto std::ranges::__cust_access::_Begin::operator()(_Tp&&) const [with _Tp = S&]’: begin.cc:4:30: required from here /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:418:2: required by the constraints of ‘template<class _Tp> requires (__maybe_borrowed_range<_Tp>) && ((is_array_v<typename std::remove_reference<_Tp>::type>) || (__member_begin<_Tp>) || (__adl_begin<_Tp>)) constexpr auto std::ranges::__cust_access::_Begin::operator()(_Tp&&) const’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:416:4: note: no operand of the disjunction is satisfied 415 | requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 416 | || __adl_begin<_Tp> | ^~~~~~~~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:415:11: note: the operand ‘is_array_v<std::remove_reference_t<_Tp> >’ is unsatisfied because 415 | requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 416 | || __adl_begin<_Tp> | ~~~~~~~~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:418:2: required by the constraints of ‘template<class _Tp> requires (__maybe_borrowed_range<_Tp>) && ((is_array_v<typename std::remove_reference<_Tp>::type>) || (__member_begin<_Tp>) || (__adl_begin<_Tp>)) constexpr auto std::ranges::__cust_access::_Begin::operator()(_Tp&&) const’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:415:11: note: the expression ‘is_array_v<typename std::remove_reference<_Tp>::type> [with _Tp = S&; _Tp = S&]’ evaluated to ‘false’ 415 | requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:415:50: note: the operand ‘__member_begin<_Tp>’ is unsatisfied because 415 | requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ 416 | || __adl_begin<_Tp> | ~~~~~~~~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:383:15: required for the satisfaction of ‘__member_begin<S&>’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:383:32: in requirements with ‘S& __t’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:385:18: note: the required expression ‘std::ranges::__cust_access::__decay_copy(__t.begin())’ is invalid, because 385 | { __decay_copy(__t.begin()) } -> input_or_output_iterator; | ~~~~~~~~~~~~^~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:385:23: error: ‘struct S’ has no member named ‘begin’ 385 | { __decay_copy(__t.begin()) } -> input_or_output_iterator; | ~~~~^~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:416:7: note: the operand ‘__adl_begin<_Tp>’ is unsatisfied because 415 | requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 416 | || __adl_begin<_Tp> | ~~~^~~~~~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:392:15: required for the satisfaction of ‘__adl_begin<S&>’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:393:5: in requirements with ‘S& __t’ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:395:18: note: the required expression ‘std::ranges::__cust_access::__decay_copy(std::ranges::__cust_access::begin(__t))’ is invalid, because 395 | { __decay_copy(begin(__t)) } -> input_or_output_iterator; | ~~~~~~~~~~~~^~~~~~~~~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:395:24: error: use of deleted function ‘void std::ranges::__cust_access::begin(auto:1&) [with auto:1 = S]’ 395 | { __decay_copy(begin(__t)) } -> input_or_output_iterator; | ~~~~~^~~~~ /home/patrick/code/gcc-master/libstdc++-v3/include/bits/range_access.h:388:10: note: declared here 388 | void begin(auto&) = delete; | ^~~~~