pub fn join_all<I>(iter: I) -> JoinAll<I::Item>
where
    I: IntoIterator,
    I::Item: Future,
{
    let iter = iter.into_iter();

    #[cfg(target_os = "none")]
    #[cfg_attr(target_os = "none", cfg(not(target_has_atomic = "ptr")))]
    {
        let kind =
            JoinAllKind::Small { elems: iter.map(MaybeDone::Future).collect::<Box<[_]>>().into() };

        assert_future::<Vec<<I::Item as Future>::Output>, _>(JoinAll { kind })
    }

    #[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
    {
        let kind = match iter.size_hint().1 {
            Some(max) if max <= SMALL => JoinAllKind::Small {
                elems: iter.map(MaybeDone::Future).collect::<Box<[_]>>().into(),
            },
            _ => JoinAllKind::Big { fut: iter.collect::<FuturesOrdered<_>>().collect() },
        };

        assert_future::<Vec<<I::Item as Future>::Output>, _>(JoinAll { kind })
    }
}
Creates a future which represents a collection of the outputs of the futures
given.

The returned future will drive execution for all of its underlying futures,
collecting the results into a destination `Vec<T>` in the same order as they
were provided.

This function is only available when the `std` or `alloc` feature of this
library is activated, and it is activated by default.

# See Also

`join_all` will switch to the more powerful [`FuturesOrdered`] for performance
reasons if the number of futures is large. You may want to look into using it or
its counterpart [`FuturesUnordered`][crate::stream::FuturesUnordered] directly.

Some examples for additional functionality provided by these are:

* Adding new futures to the set even after it has been started.

* Only polling the specific futures that have been woken. In cases where
you have a lot of futures this will result in much more efficient polling.

# Examples

```
# futures::executor::block_on(async {
use futures::future::join_all;

async fn foo(i: u32) -> u32 { i }

let futures = vec![foo(1), foo(2), foo(3)];

assert_eq!(join_all(futures).await, [1, 2, 3]);
# });
```
futures-util/src/future/join_all.rs