Namespaces
Variants

std::ranges::join_with_view<V,Pattern>:: iterator <Const>:: operator++,--

From cppreference.net
Ranges library
Range adaptors
constexpr /*iterator*/ & operator ++ ( ) ;
(1) (desde C++23)
constexpr void operator ++ ( int ) ;
(2) (desde C++23)
constexpr /*iterator*/ operator ++ ( int )

requiere std:: is_reference_v < /*InnerBase*/ > &&
ranges:: forward_range < /*Base*/ > &&

ranges:: forward_range < /*InnerBase*/ > ;
(3) (desde C++23)
constexpr /*iterator*/ & operator -- ( )

requiere std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(4) (desde C++23)
constexpr /*iterator*/ operator -- ( int )

requiere std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(5) (desde C++23)

Incrementa o decrementa el iterador.

1) Incrementa el iterador interno como si fuera mediante std:: visit ( [ ] ( auto & it ) { ++ it ; } , inner_it_  ) ; .
Después de eso, ajusta los iteradores interno y externo de la siguiente manera:
  • Si el iterador interno incrementado es el iterador past-the-end del rango del patrón, se establece en un iterador al inicio del siguiente rango interno.
  • Si el iterador interno incrementado es el iterador past-the-end de un rango interno, se incrementa el iterador externo. Luego:
  • Si el iterador externo incrementado no es el iterador past-the-end del rango externo, el iterador interno se establece en un iterador al inicio del rango del patrón.
  • De lo contrario, si std:: is_reference_v < InnerBase   > es true , el iterador interno se establece en un iterador del patrón que contiene un valor singular .
  • Repite las operaciones anteriores hasta que el iterador interno no sea un iterador past-the-end, o el iterador externo sea un iterador past-the-end.
2) Equivalente a ++* this ; .
3) Equivalente a auto tmp = * this ;
++* this ;
return tmp ;
.
4) Si el iterador externo es el iterador pasado-el-final del rango externo, lo decrementa y establece el iterador interno al iterador pasado-el-final del último rango interno, de lo contrario no hace nada.
Después de eso, ajusta los iteradores interno y externo de la siguiente manera:
  • Si el iterador interno se refiere al inicio de un rango interno, se establece en el iterador pasado-el-final del rango del patrón.
  • Si el iterador interno se refiere al inicio del rango del patrón, el iterador externo se decrementa y el iterador interno se establece en el iterador pasado-el-final del rango interno anterior.
  • Repite las operaciones anteriores hasta que el iterador interno no se refiera al inicio de ningún rango.
Finalmente, decrementa el iterador interno como si fuera mediante std:: visit ( [ ] ( auto & it ) { -- it ; } , inner_it_  ) ; .
5) Equivalente a auto tmp = * this ;
--* this ;
return tmp ;
.

Valor de retorno

1,4) * this
3,5) Una copia de * this que se realizó antes del cambio.