template<class T>
associated_executor_t<T> get_associated_executor(const T& t) noexcept;
Returns: associated_executor<T>::get(t).
template<class T, class Executor>
associated_executor_t<T, Executor>
get_associated_executor(const T& t, const Executor& ex) noexcept;
Returns: associated_executor<T, Executor>::get(t, ex).
Remarks: This function shall not participate in overload resolution unless is_executor_v<Executor> is true.
template<class T, class ExecutionContext>
associated_executor_t<T, typename ExecutionContext::executor_type>
get_associated_executor(const T& t, ExecutionContext& ctx) noexcept;
Returns: get_associated_executor(t, ctx.get_executor()).
Remarks: This function shall not participate in overload resolution unless is_convertible<ExecutionContext&, execution_context&>::value is true.