* Fix missing operator[] for iota_iterator and repeat_iterator
The iterators of etl::ranges::iota_view and etl::ranges::repeat_view are
random access iterators but they did not define any operator[]. This did
not cause any issues when using mutable views since the implementation
of operator[] provided by view_interface for random access views was
hidden by another implementation using etl::advance. However, this was
not the case for 'operator[] const', which resulted in a build error
when using constant views.
This commit ensures that the operator[] implementation for random access
views is no longer hidden by another implementation in view_interface,
and adds operator[] to both iterators.
* Fix sign conversion error on operator[] for some views
The operator[] definitions provided by view_interface were accepting
size_t arguments. This was causing a compile-time warning
(Wsign-conversion) for the random access views using an iterator with a
signed difference type. This has been observed on etl::ranges::iota_view
and etl::ranges::repeat_view.
No test is added since the tests provided by the previous commit already
produce the warning, causing a build error.
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fix etl::get to preserve reference members for tuple rvalues
The rvalue-qualified overloads of etl::get (both the index-based and
type-based forms) unconditionally applied etl::move to the stored
element. For a tuple holding a reference member (e.g. etl::tuple<int&>),
this cast the referenced object to an rvalue instead of returning the
stored lvalue reference, diverging from std::get and failing to compile
when the result was bound to a non-const lvalue reference.
Forward the element with static_cast<element_type&&> instead, so that
reference members collapse to an lvalue reference while value members are
still moved. This is required to support tuples of references such as
those produced by the zip, enumerate and adjacent views.
* Make ranges views return non-const references to make them mutable
* Support type-changing transform_view
* Fix join_with_iterator reference type to match operator*
join_with_iterator declared reference = inner_trait::reference (e.g. int&)
while operator* returns value_type by value. For prvalue-yielding inner
ranges (e.g. repeat_view from a type-changing transform) the declared
reference was inconsistent with the actual dereference. Derive value_type
from the inner iterator's dereference and set reference = value_type,
preserving by-value semantics.
Add regression test for transform|join_with with prvalue inner ranges.
* Make join_with conform to [range.join.with.iterator] using inner/pattern common reference
* Clang-format
* Fix owning_view const begin()/end() by making _r mutable so chunk_view compiles over rvalue ranges
Removing private class members, code unused by ETL in "private"
namespaces, code unreachable via preprocessor guards (C++11 inside
C++03).
For code still to be kept, even though unused at first sight, add
tests.
* Print test names at test time (#1343)
* Suppress false positive compiler warnings when compiling with -O3
The CI checks currently only check everything with -O0. Wenn activating
higher optimization levels, more warnings kick in. Leading to errors,
depending on the configuration.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add ranges
* Print test names at test time (#1343)
* Fix conflit commit errors
* Cast return value of operator* to value_type
Fixed warning on VS2022
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>