* feat: Add constexpr support for delegate construction and assignment in C++14 and C++20
* docs: add more docstring coverage #1473
* docs: note constexpr availability for function-pointer overloads
Update docs/callbacks/delegate.md to reflect the new ETL_CONSTEXPR14
annotations on delegate(function_ptr) and create(function_ptr), and add
a paragraph to the Constexpr section explaining which function-pointer
APIs are usable in constant expressions at C++14 vs C++20.
#1473
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
* Fix delegate not being cleared by assigning empty braces
Fixes issue #1399.
The non-capturing lambda support (PR#1295) added a non-explicit
delegate(function_ptr) constructor and operator=(function_ptr). This
caused `delegate = {}` to implicitly convert `{}` to a null function
pointer and bind it via function_ptr_stub, leaving the delegate
appearing valid (stub != nullptr) but invoking through a null pointer
(undefined behavior).
Fix:
- Mark delegate(function_ptr) constructor explicit to prevent implicit
conversion from `{}` during initialization.
- In operator=(function_ptr), clear the delegate when fp is null
instead of binding a null pointer through function_ptr_stub.
Added tests verifying that both `delegate d = {}` and `d = {}` produce
an invalid (cleared) delegate.
* Fix Dockerfile for powerpc cross build
Debian snapshot sources were mixed with plain sid sources which
mismatched after a while. Now, aligning all sources from snapshot
server.
* Make all call interfaces in etl::delegate conditionally noexcept
This covers the case when the invoked code can throw.
For operator(), this was already implemented. Do similarly for the
other call interfaces.
* Make all call interfaces in etl::closure conditionally noexcept
Similar to etl::delegate, the contained delegate might be
throwing. Apply the same solution as in etl::delegate to make
the call interfaces conditionally noexcept.