6267 Commits

Author SHA1 Message Date
Marco Nilsson
d06cd9f303
Allow expected to be constructed from a convertible value or expected (#1587) 2026-09-07 16:23:20 +02:00
Roland Reichwein
d5156f9a1a
Fix false positive warning from GCC 16 (#1591) 2026-09-07 14:42:44 +02:00
John Wellbelove
043094129a Added sponsors page to documentation 2026-09-06 20:35:56 +01:00
John Wellbelove
75cd310fd4 Updated menus for Home page for documentation 2026-09-06 20:29:32 +01:00
John Wellbelove
53a05760e0 Version updates 2026-09-05 16:15:27 +01:00
John Wellbelove
ae9207dd0a Changed version from 20.50.0 to 20.49.0 2026-09-05 16:15:26 +01:00
Ayesha Noor
dd05595860
Fix MSVC C4244 warning in format specifiers (#1589)
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-09-05 12:22:48 +01:00
Roland Reichwein
c8f610a69d
Optimize format.h (#1588)
Dispatch only the argument types which are actually stated. For everything
else, don't generate the code anymore.

Detemplatize parse_format_spec().

Collapse long double and double to double on targets where they are
same size. This helps prevent duplicate code generation.
2026-09-05 09:08:56 +02:00
John Wellbelove
155df46889 Merge branch 'master' into development 2026-09-03 15:16:51 +01:00
John Wellbelove
75c07eca54
Absolute and casting updates (#1583) 2026-09-03 14:38:51 +02:00
Björn Schäpers
a547336322
Set default compare for iconst_map (#1560)
This is consistent with (i)flat_map, and allows to just write iconst_map<K, V>.

Add tests, also fix iconst_set.
2026-09-03 13:27:56 +02:00
Roland Reichwein
e25a44195c
Fix size type of string_view (#1586)
Fixes #1577

Rename variables to align to snake_case convention
2026-09-03 12:36:00 +02:00
John Wellbelove
de83834198
Add Conan Center badge to README 2026-09-02 19:57:19 +01:00
Roland Reichwein
ed5219283b
Detect builtins (#1581)
Even without ETL_USE_TYPE_TRAITS_BUILTINS in the profile, we get
compiler builtins detected. Makes detection more consistent now.

Previously, some type trait builtins were detected automatically,
and some others needed to be activated via ETL_USE_TYPE_TRAITS_BUILTINS
in the profile explicitly.

Replaces: #1174

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-09-02 08:58:40 +01:00
John Wellbelove
452b6269f3 Add search to the Hugo website 2026-09-02 08:56:25 +01:00
John Wellbelove
0723fca18c Add search to the Hugo website 2026-09-02 08:54:41 +01:00
Roland Reichwein
2f338411a3
Fix symbols to be exportable from C++20 named modules (#1582)
Fixes #1543

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-09-01 20:25:31 +01:00
Roland Reichwein
c896d2d7dd
Support variable number of arguments to inject at runtime (#1580)
Further, switching internal member from array_view to span to
be closer to standard, and more constexpr friendly.

Also adjusting to C++11 template syntax.

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-09-01 19:16:24 +01:00
Roland Reichwein
06e54f6b23
Add missing type traits (#1573)
etl::is_scoped_enum
etl::is_trivially_default_constructible
etl::is_trivially_move_constructible
etl::is_trivially_move_assignable
etl::is_trivially_assignable
etl::is_layout_compatible
etl::is_pointer_interconvertible_base_of

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-31 19:09:16 +01:00
Roland Reichwein
fa238db580
Fix sanitizer builds (#1579)
Besides, remove unused ASAN_OPTIONS from github workflows.

Further, activate sanitizers for C++23 workflows, at the places
where we also activated -O3 optimization. Not activating everywhere
for CI efficiency reasons for now.

Note that the sanitizers are activated on clang C++23 workflows
only, since there is a remaining issue with GCC in delegate_cpp11.
2026-08-31 19:08:25 +01:00
John Wellbelove
ddf2345599 Merge branch 'master' into development 2026-08-30 14:44:33 +01:00
Roland Reichwein
fe4db13587
Make etl::variant trivially copyable (#1574) 2026-08-28 12:49:01 +02:00
Sergei
49a9ebde78
Fixed building and unit tests run under XCode 2027 Beta 6 (#1572)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

* Fixed building and unit tests run under XCode 2027 Beta 6 (AppleClang 21.0.0.21000333):
- Compilation failures:
  - `etl::ideque::iterator::operator[]` index type should be `difference_type` (instead of `size_t`).
  - random-access `etl::poly_span::iterator` is missing `operator[]`.
- Unit tests failures of `test_multimap` suit:
  - fixed `equal_range`-related tests to properly verify result range (via new `Check_Equal` overload helper).
  - fixed `find`-related tests to not depend on particular order of `second` values (via new `Check_ContainsPair` helper). See note 1,2) at [cppreference](https://cppreference.com/cpp/container/multimap/find) about order.

* PR review fixes.

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-28 10:21:00 +01:00
Konstantinos Kanavouras
1a1f259ccb
Remove spurious link in documentation (#1576)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

* Remove spurious link

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-28 09:41:00 +01:00
Roland Reichwein
74a95cf360
For optional monadic operations, add docs, tests, and complete type (#1568) 2026-08-27 13:17:43 +02:00
Войтко Валерий Павлович
bfa29188c1
fix: Refactor FreeRTOS includes to use conditional (#1445)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
2026-08-27 10:26:51 +01:00
Roland Reichwein
bd0d7e67ad
Drop Debian 11 (bullseye) support (#1571)
Replaces PR https://github.com/ETLCPP/etl/pull/1519
2026-08-27 11:05:35 +02:00
Roland Reichwein
c6c1ee1b28
Add missing etl::ranges::distance overload (#1569)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

* Add missing etl::ranges::distance overload

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-26 20:16:54 +01:00
Hiten Gupta
e4fc36d6f2
Fix FreeRTOS.h/semphr.h include paths for ESP-IDF (fixes #1439) (#1570)
mutex_freertos.h unconditionally included the vanilla FreeRTOS header
layout (FreeRTOS.h and semphr.h at the include root). On ESP-IDF, and
therefore Arduino-ESP32 as well since it's built on top of ESP-IDF,
these headers are nested one level deeper under freertos/, so the
unconditional include fails to compile on any ESP32 target with
ETL_TARGET_OS_FREERTOS defined.

Use __has_include to try the standard path first, fall back to the
ESP-IDF nested path, and fail with a clear #error if neither is found,
rather than a mysterious "file not found" from the compiler.

Also resolves a pre-existing include-style inconsistency in this file:
the old code mixed "FreeRTOS.h" (quotes) with <semphr.h> (angle
brackets). All includes now uniformly use angle brackets.
2026-08-26 13:04:46 +02:00
davmf
f7520ad0bd
Topic/optional monadic operations (#1501)
* Topic/optional monadic operations

* topic/optional-monadic-operations:
	- added and_then, or_else, and transform to etl::optional with unit tests
	- added is_optional to optional.h, used in and_then and or_else to ensure that the returned type is an optional
	- implemented as ref-qualified overloads with C++11 compatible trailing return types, following the etl::expected implementation

* Convert to C++11 style type traits

* Coderabbit changes

Constrain transform before forming etl::optional<U>.
Remove references from monadic result types.

* clang-format updates

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-25 09:29:01 +01:00
Roland Reichwein
01a07a1728
Fix guards in array.h and test/test_array.h (#1566)
Follow-up for https://github.com/ETLCPP/etl/pull/1553 where this
change was intended but missed
2026-08-24 15:16:17 +02:00
Roland Reichwein
fa3ac28f55
Add etl::is_standard_layout and other type traits according to std (#1545)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

* Add etl::is_standard_layout and further type traits

Added type traits:

* etl::is_standard_layout
* etl::is_null_pointer
* etl::is_union
* etl::is_scalar
* etl::is_empty
* etl::is_polymorphic
* etl::is_abstract
* etl::is_final
* etl::is_aggregate
* etl::is_destructible
* etl::is_nothrow_destructible
* etl::has_virtual_destructor
* etl::is_swappable
* etl::is_swappable_with
* etl::is_nothrow_swappable
* etl::is_nothrow_swappable_with
* etl::has_unique_object_representation
* etl::is_bounded_array
* etl::is_unbounded_array
* etl::is_trivial

Document etl::is_pod

Note that etl::swap needed adjustment to enable nothrow detection via
SFINAE constraints. This change closes in to the standard.

* Fix preprocessor directive formatting in header

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-24 13:11:11 +01:00
rleigh-electradx
25e2d6e8a3
Adopt the Library Fundamentals TS make_array design for the sequence factories (#1553)
* Adopt the Library Fundamentals TS make_array design for the sequence factories

make_array, make_deque, make_vector, make_list, make_forward_list and
make_indirect_vector now follow the Library Fundamentals TS
std::experimental::make_array design: a defaulted leading template
parameter selects the element type explicitly, falling back to the
decayed common type of the arguments when it is not supplied. A shared
trait (etl::private_make::element_type) performs the selection lazily,
so common_type is not instantiated when the element type is explicit.

This fixes the explicit-element-type calling style for the four
common-type factories, where make_vector<char>(lvalue) never compiled:
the explicit argument pinned the first pack parameter to char, making
it a char&& that no lvalue can bind to. It also gives make_array and
make_deque the deduced form (e.g. make_array(1, 2L) is array<long, 2>)
for free. All arguments are converted with static_cast, as in the
make_array const-lvalue fix, so const-qualified lvalues and narrowing
initialisers work in both forms.

Intentional behaviour change: an explicit element type now converts
every argument instead of pinning only the first. make_vector<char>(0,
1, ...) previously produced vector<int> - the explicit char affected
only the first argument and the element type was still the common type
- and now produces vector<char>. test_make_vector documented the old
behaviour and has been updated.

The keyed set and map factories are unchanged: their key/mapped types
are separate mandatory template parameters ahead of a fully-deduced
pack, so the explicit-type style already works, and retrofitting
deduction there would interact with the defaulted comparator/hash
parameters.

Adds explicit-element-type tests for the four common-type factories
(const/non-const lvalues plus narrowing initialisers) and
deduced-element-type tests for make_array and make_deque, and updates
the four documented signatures.

* Address review comments on the make_xxx factory design

- Forward same-type arguments in the make_xxx factories instead of
  casting them. static_cast produced a prvalue that, before C++17, had
  to be materialised through the move constructor, rejecting
  copyable-but-non-movable element types. The new
  private_make::convert helper forwards arguments that already have
  the element type and static_casts the rest.
- Drop ETL_NOEXCEPT from make_array: conversions can throw, and the
  other factories do not declare it.
- Remove the redundant etl::decay in element_type<void, ...>;
  etl::common_type already decays its arguments.
- Stop leaking the etl::private_make implementation namespace into the
  documented factory signatures.

* Add a test for make_array with an explicit element type and no arguments

etl::make_array<int>() produces an empty etl::array<int, 0> and now has
a regression test. A call with neither an element type nor arguments
remains ill-formed, matching the Library Fundamentals TS: there is
nothing to deduce the element type from. The array documentation now
states this explicitly.

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
2026-08-24 08:53:25 +01:00
myrkle11
294b788942
Update etl::expected documentation (#1564)
* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

* Update expected documentation to reflect the current state of the code

* Fix code blocks for expected class section

* Change wording slightly

* make changes ala coderabbitai

* Fixed typos

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-23 23:30:39 +01:00
Christoph Rüthing
82e41547bb
Make etl_profile Incompatible by Default (#1535)
* Make etl_profile Incompatible by Default

* Configure etl_profile for CI Execution of Tests

* Update _index.md

* Update _index.md

* Cherry pick the Docker fixes for PowerPC (#1563)

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-23 18:47:28 +01:00
Drew Rife
ffd64f374b
circular_buffer: add initialization and assignment overloads (#1556)
* feat(circular_buffer): add initialization and assignment overloads

* fix(circular_buffer): handle self-referential assignment

* docs: document constructors and assign methods

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-22 20:10:38 +01:00
Mike Bloom
1a72c88d47
string_view: clamp n in remove_prefix and remove_suffix (#1513)
* remove_prefix, premove_suffix, clamp n to size()

* Add function documentation

* Add ETL_ASSERT

* Remove ETL_NOEXCEPT_IF

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-22 20:09:07 +01:00
John Wellbelove
2ddfc0d2f2
Cherry pick the Docker fixes for PowerPC (#1563)
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-08-22 19:20:49 +01:00
Roland Reichwein
22fc884d45
Various cleanup (#1562)
* Fix wrong templating

* Fix stray double parens

* Documentation cleanup: Some key/value actually are value only
2026-08-22 17:47:16 +02:00
Christoph Rüthing
9b1890e00c
Add Macro for Inline Control (#1552)
In specific situations there might be the need to enforce that a method
is not inlined or always inlined (when using e.g. raw assembly).
Therefore, we provide two macros ETL_NO_INLINE and ETL_ALWAYS_INLINE.

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-22 09:31:29 +01:00
Björn Schäpers
ed6c46bf7d
Allow easier construction of const_(multi_)map (#1561)
When forcing to feed into value_types it has to be an
ETL_OR_STD::pair<const K, V>, but when you want to use CTAD on the pairs the
const is missing and the assert triggers.
2026-08-22 08:02:39 +01:00
Roland Reichwein
266b0f99c6
Constexpr for unaligned_type (#1555) 2026-08-21 12:27:32 +02:00
Björn Schäpers
7966ba86df
Fix delegate clear through assignment (#1546)
Because the ptr was not nulled, it did not compare equal to a default
constructed delegate anymore.
2026-08-21 07:27:09 +01:00
Drew Rife
d12874c24a
CI: cancel superseded workflow runs (#1557)
* Update _index.md

* Update _index.md

* ci: cancel superseded workflow runs

* ci: serialize documentation deployments

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-20 20:20:24 +01:00
Roland Reichwein
e2a9f2b10f
Remove redundant ETL_USING_STL in tests (#1559) 2026-08-20 16:47:17 +02:00
Drew Rife
e34ba686ba
CI: Filter compiler workflows by path (#1558)
* Update _index.md

* Update _index.md

* ci: filter compiler workflows by path

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-20 11:15:16 +01:00
Eden Frosst
9125f11964
delegate: restore argument deduction behaviour (#1548)
include new test that verifies arg deduction works

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-20 09:00:10 +01:00
Christoph Rüthing
67d033cab0
Fix PowerPC Dockerfile to use Snapshot consistently (#1554)
* Update _index.md

* Update _index.md

* Fix PowerPC Dockerfile to use Snapshot consistently

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-20 08:11:15 +01:00
Roland Reichwein
88b629c121
Fix expected::operator*() const& and && failing to compile (#1538)
ETL_ASSERT_OR_RETURN_VALUE tried to return ETL_NULLPTR from functions
returning references, which cannot be initialized from nullptr. Use
plain ETL_ASSERT instead, matching the other operator*() overloads.

Add regression test for dereferencing const and temporary expected.

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-08-17 12:52:42 +02:00
rleigh-electradx
70d64496e6
Fix make_array and make_deque rejecting const-qualified lvalues of the element type (#1526)
* Fixed make_array rejecting const-qualified lvalues of the element type

make_array forwarded each argument as T (the element type) rather than
as its own deduced type. etl::forward<T> accepts only a non-const T& or
a T&&, and a T&& cannot bind to a reference-related const lvalue, so
any call passing a const-qualified lvalue of type T failed to compile:

  static const char c = 42;
  etl::make_array<char>(c, c);   // error: would lose const qualifier

Arguments of *other* types slipped through via temporary
materialisation, which is why the existing conversion and move tests
never caught it.

Forward each argument as its own deduced type and convert explicitly
with static_cast<T>. The explicit conversion is required rather than
plain forwarding: function parameters are not constant expressions, so
narrowing initialisers such as make_array<char>(0, 1) - which the old
code accepted and the tests cover - would otherwise be rejected by the
braced initialiser list.

Adds regression tests for const/non-const lvalues of the element type
and for constexpr evaluation. Verified with clang 22 (C++14/17/20) and
GCC 14 (C++11/20); existing conversion and move-only patterns still
compile.

* Fixed make_deque rejecting const-qualified lvalues of the element type

make_deque had the same defect fixed for make_array in the previous
commit: it forwarded each argument as T (the element type) rather than
as its own deduced type. etl::forward<T> accepts only a non-const T& or
a T&&, and a T&& cannot bind to a reference-related const lvalue, so
any call passing a const-qualified lvalue of type T failed to compile:

  static const char c = 42;
  etl::make_deque<char>(c, c);   // error: would lose const qualifier

An audit of all other make_xxx container factories found no further
instances - they forward each argument as its own deduced pack type,
which is the correct idiom.

Forward each argument as its own deduced type and convert explicitly
with static_cast<T>. The explicit conversion keeps narrowing
initialisers such as make_deque<char>(0, 1) - which the old code
accepted and test_make_deque covers - working, which plain forwarding
into the braced initialiser list would reject.

Adds a regression test for const/non-const lvalues of the element type.
No constexpr test, unlike make_array: etl::deque is not a literal type,
so make_deque cannot be evaluated at compile time. Verified with
clang 22 (C++14/17/20); the new test fails to compile before the fix
and passes after, and all 101 deque tests pass.

* Added narrowing-conversion regression tests for make_array and make_deque

Review feedback on the make_deque fix: the const-lvalue regression test
only passes arguments that already have the element type, so nothing
exercises the static_cast<T> conversion that keeps narrowing
initialisers working. If the implementation regressed to plain
forwarding into the braced initialiser list, narrowing calls such as
make_deque<char>(0, 1) would fail to compile.

make_array already covered narrowing from int literals via
test_make_array, but neither container covered conversion from
const-qualified lvalues of a different type (const int narrowed to
char), which combines both dimensions of the fix.

Adds a matching test to each container covering int literals plus
const/non-const int lvalues, all narrowed to char. Verified with
clang 22 (C++17): 102 deque and 53 array tests pass.

* Added const-lvalue regression tests for the remaining make_xxx factories

Review feedback on the make_array/make_deque fixes asked whether the
same defect - rejecting const-qualified lvalue arguments by forwarding
each argument as the element type rather than as its own deduced type -
exists in the other make_xxx container factories. The audit found that
it does not: the other factories forward each argument as its own
deduced pack type. These tests pin that down explicitly for every
remaining factory, mirroring the make_array and make_deque regression
tests:

- make_vector, make_forward_list, make_indirect_vector (element type
  deduced via common_type): const/non-const char lvalues, element type
  checked.
- make_set, make_multiset, make_flat_set, make_flat_multiset,
  make_unordered_set, make_unordered_multiset: const/non-const lvalues
  of the key type.
- make_map, make_multimap, make_flat_map, make_flat_multimap,
  make_unordered_map, make_unordered_multimap: const/non-const lvalues
  of the pair type.

make_reference_flat_* are excluded: they cannot currently be
instantiated at all (no initializer_list constructor exists in the
reference containers), which is reported separately.

Verified with clang 22 (C++17): all 15 test suites pass (996 tests).

* Added make_forward_list parity tests matching the make_list fixes

Checked whether the make_list defect - taking its argument pack by
value, costing an extra move per lvalue argument - also applies to
make_forward_list. It does not: make_forward_list already takes its
pack by forwarding reference, as make_vector does. No header change is
needed.

Adds the two tests that accompanied the make_list fix so that
forward_list has the same coverage and the same regression detector:

- test_make_forward_list_common_type_from_mixed_types, confirming the
  element type deduction through common_type.
- test_make_forward_list_argument_copy_and_move_counts, an
  instrumented type counting copy/move constructions. This is the test
  that fails if the pack ever regresses to by-value (one extra move
  per lvalue argument). The exact move counts are C++17-only, as
  before C++17 the non-guaranteed return elision may add a move per
  element.

Verified with clang 22 (C++17): all 67 forward_list tests pass.

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
2026-08-17 10:13:34 +02:00