conditionally contribute set_error_t(std::exception_ptr) in repeat_* senders#1799
conditionally contribute set_error_t(std::exception_ptr) in repeat_* senders#1799justend29 wants to merge 17 commits intoNVIDIA:mainfrom
set_error_t(std::exception_ptr) in repeat_* senders#1799Conversation
Co-authored-by: Eric Niebler <eniebler@boost.org>
|
Thank you for the review, @ericniebler. All of your comments have been addressed, though |
|
/ok to test ac8352c |
|
/ok to test 99cf087 |
|
@ericniebler It's odd that the CI jobs using an older version of GCC fail while the other CI jobs pass. I tested everything with GCC15.2.1 locally. I'm not sure if you have any ideas, but I can probably install an older version of GCC and try to reproduce the failing build locally over the weekend. |
that's business as usual. getting CI to pass with older, less-conforming compilers is often the majority of the work for PRs. i wish things were different. |
|
Two competing compiler issues were found that I'll document for future reference: Firstly, older versions of GCC delete arguments to function signatures in type traits and concepts - at least from compiler errors. For example (note the static_assert(std::same_as<int(char, double), int(double, char)>);This made it incredibly hard to debug a test for completion signatures, as every static_assert to check a subset of the problem involves a function signature that the compiler would erase the arguments of. Secondly, using Should there be further compiler conformance issues in CI, I'll address those, too. |
Currently, the
repeat_family of sender adapters invariantly contributesset_error_t(std::exception_ptr)to its completion signatures, which I first mentioned in this issue. This PR causesrepeat_until,repeat, andrepeat_nto conditionally contributeset_error_t(std::exception_ptr)to the completion signatures. Each of the possible cases (not) to contribute the completion signature are individually tested.It also contains some small corrections that were originally in #1797, until @RobertLeahy informed me that it is possible to detect the
noexcept-ness of aconnectusingSTDEXEC::__receiver_archetype<Env>, wherein I returned to this original goal.This is also my first time working with the meta-programming system in this library, so feedback is welcome.