Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

certain non-decomposable senders caus a compilation error

Open
#252 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
cpp
Domain
compilers

Research direction

Reproduce the compilation error from the example using beman/execution/execution.hpp and ex::get_completion_signatures. Inspect ex::tag_of_t and the basic_sender detection path to understand why the two-argument non_decomposable_sender is treated as decomposable. Done means the example compiles without removing a constructor parameter, with coverage for this regression.

Written by the indexing model from the issue text.

Description

The following code results in a compilation error:

#include <beman/execution/execution.hpp>
namespace ex = beman::execution;

namespace {
    struct non_decomposable_sender {
        using sender_concept = ex::sender_t;
        template <typename...>
        static consteval auto get_completion_signatures() { return test_std::completion_signatures<ex::set_value_t()>(); }
        non_decomposable_sender(int, int) {}
    };
}

int main() {
    (void)ex::get_completion_signatures<non_decomposible_sender, ex::env<>>();
}

Removing one of the int constructor parameters causes the code to compile!

The issue is that sender is used with ex::tag_of_t which tries to guess whether a type is decomposable. If it think it can decompose objects of a type it will extract a tag. However, the above type can't be decomposed.

Currently, I don't know how to properly fix the problem. The tentative plan is to rather detect if a sender is built using basic_sender (probably indirectly by actually detecting a nested type) and only try to decompose such senders.

Dominant language
C++
Stars
150
Forks
23
Avg merge
3d 5h
Merged PRs (30d)
9

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from bemanproject/execution

All issues in bemanproject/execution

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.