7 Commits

Author SHA1 Message Date
taltenbach
9d92081d1e
Fix operator[] for const iota_view and repeat_view (#1525)
* 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>
2026-08-04 09:01:42 +02:00
Roland Reichwein
05010aebf8
Fix ranges (#1475)
* 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
2026-06-24 13:39:06 +01:00
Roland Reichwein
4f411c66a9
Remove dead code (#1427)
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.
2026-05-03 22:49:02 +02:00
Roland Reichwein
29d0cfec7c
Suppress false positive compiler warnings when compiling with -O3 (#1389)
* 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>
2026-04-14 12:38:59 +02:00
Roland Reichwein
f258fe4af8 Fix operator| conflict with std::ranges (#1395) 2026-04-14 12:00:37 +02:00
John Wellbelove
aeb8e4f734 Formatted source files 2026-04-02 14:11:45 +01:00
Roland Reichwein
31b87b5419
Add C++ ranges library for C++17 (#1316)
* 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>
2026-03-26 08:56:17 +00:00