Skip to content

constraints on into_variant's get-state function are incorrect #314

Open
@ericniebler

Description

@ericniebler

[exec.into.variant] p5 reads:

The member impls-for<into_variant_t>​::​get-state is initialized with a callable object equivalent to the following lambda:

[]<class Sndr, class Rcvr>(Sndr&& sndr, Rcvr& rcvr) noexcept
  -> type_identity<value_types_of_t<child-type<Sndr>, env_of_t<Rcvr>>>  {
  return {};
}

The constraint should account for the fact that the child sender will be connected with FWD-ENV(get_env(rcvr)).

Proposed Resolution

Change [exec.snd.expos] p2 as follows:

For a queryable object `env`, `FWD-ENV(env)` is an expression whose
type satisfies `queryable` such that for a query object `q` and a pack
of subexpressions `as`, the expression `FWD-ENV(env).query(q, as...)`
is ill-formed if `forwarding_query(q)` is `false`; otherwise, it is
expression-equivalent to `env.query(q, as...)`.
+The type `FWD-ENV-T(Env)` is `decltype(FWD-ENV(declval<Env>()))`.

Change [exec.into.variant] p5 as follows:

The member `impls-for<into_variant_t>​::​get-state` is initialized with
a callable object equivalent to the following lambda:

  []<class Sndr, class Rcvr>(Sndr&& sndr, Rcvr& rcvr) noexcept
-   -> type_identity<value_types_of_t<child-type<Sndr>, env_of_t<Rcvr>>> {
+   -> type_identity<value_types_of_t<child-type<Sndr>, FWD-ENV-T(env_of_t<Rcvr>)>> {
    return {};
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1bugSomething isn't workingpending-wg21A paper or an LWG issue exits

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions