24 using Value =
typename Head::Value;
27 if constexpr ((... && std::is_same_v<Value, typename Futures::Core::Value>)) {
29 return when::When<when::Join, F, void, OutputError>(std::move(
futures)...);
31 using OutputValue = std::vector<ContainerElem<Head, F>>;
32 return when::When<when::All, F, OutputValue, OutputError>(std::move(
futures)...);
35 using OutputValue = std::tuple<ContainerElem<typename Futures::Core, F>...>;
36 return when::When<when::AllTuple, F, OutputValue, OutputError>(std::move(
futures)...);
44 if constexpr (std::is_same_v<typename T::Core::Value, void> && F !=
FailPolicy::None) {
45 return when::When<when::Join, F, void, OutputError>(
begin, count);
47 using OutputValue = std::vector<ContainerElem<typename T::Core, F>>;
48 return when::When<when::All, F, OutputValue, OutputError>(
begin, count);