in include/unifex/when_all.hpp [324:359]
friend blocking_kind tag_invoke(tag_t<blocking>, const sender& s) noexcept {
bool alwaysInline = true;
bool alwaysBlocking = true;
bool neverBlocking = false;
auto handleBlockingStatus = [&](blocking_kind kind) noexcept {
switch (kind) {
case blocking_kind::never:
neverBlocking = true;
[[fallthrough]];
case blocking_kind::maybe:
alwaysBlocking = false;
[[fallthrough]];
case blocking_kind::always:
alwaysInline = false;
[[fallthrough]];
case blocking_kind::always_inline:
break;
}
};
std::apply([&](const auto&... senders) {
(void)std::initializer_list<int>{
(handleBlockingStatus(blocking(senders)), 0)... };
}, s.senders_);
if (neverBlocking) {
return blocking_kind::never;
} else if (alwaysInline) {
return blocking_kind::always_inline;
} else if (alwaysBlocking) {
return blocking_kind::always;
} else {
return blocking_kind::maybe;
}
}