33 Execution control library [exec]

33.9 Senders [exec.snd]

33.9.5 execution​::​indeterminate_domain [exec.domain.indeterminate]

namespace std::execution { template<class... Domains> struct indeterminate_domain { indeterminate_domain() = default; constexpr indeterminate_domain(auto&&) noexcept {} template<class Tag, sender Sndr, queryable Env> static constexpr decltype(auto) transform_sender(Tag, Sndr&& sndr, const Env& env) noexcept(see below); }; }
template<class Tag, sender Sndr, queryable Env> static constexpr decltype(auto) transform_sender(Tag, Sndr&& sndr, const Env& env) noexcept(see below);
Mandates: For each type D in Domains..., the expression D().transform_sender(Tag(), std::forward<Sndr>(sndr), env) is either ill-formed or has the same decayed type as default_domain().transform_sender(Tag(), std​::​forward<Sndr>(sndr), env).
Returns: default_domain().transform_sender(Tag(), std​::​forward<Sndr>(sndr), env).
Remarks: For a pack of types Ds, common_type_t<indeterminate_domain<Domains...>, indeterminate_domain<Ds...>> is indeterminate_domain<Us...> where Us is a pack that contains each type in Domains..., Ds... except with duplicate types removed.
For a type D that is not a specialization of indeterminate_domain, common_type_t<indeterminate_domain<Domains...>, D> is D if Domains is an empty pack, and common_type_t<indeterminate_domain<Domains...>, indeterminate_domain<D>> otherwise.