mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
Resolves LWG3797, "elements_view insufficiently constrained". When P2165R4 updated __has_tuple_element in C++23 to reuse __tuple_like concept, it dropped the requirement of validity of get, assuming that for tuple_like type with size of N, get<I> on lvalue is well-formed for any I < N. This however does not hold for ranges::subrange (tuple-like of size 2) with move-only iterator, for which get can only be applied on rvalue. In consequence constrains allowed instantiating elements_view for range of such subrange, but instantiating it's iterator lead to hard error from iterator_category computation. This patch applies the requirements on validity of get also in C++23 and later standard modes. libstdc++-v3/ChangeLog: * include/std/ranges (__detail::__has_tuple_element): Check if std::get<_Nm>(__t) returns referenceable type also for C++23 and later. * testsuite/std/ranges/adaptors/elements.cc: Add test covering vector of ranges::subrange with move-only iterator. Reviewed-by: Patrick Palka <ppalka@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
file: libstdc++-v3/README New users may wish to point their web browsers to the file index.html in the 'doc/html' subdirectory. It contains brief building instructions and notes on how to configure the library in interesting ways.