Namespaces
Variants

std::experimental:: when_all

From cppreference.net
헤더 파일에 정의됨 <experimental/future>
template < class InputIt >

auto when_all ( InputIt first, InputIt last )

- > future < std:: vector < typename std:: iterator_traits < InputIt > :: value_type >> ;
(1) (concurrency TS)
template < class ... Futures >

auto when_all ( Futures && ... futures )

- > future < std:: tuple < std:: decay_t < Futures > ... >> ;
(2) (concurrency TS)

입력된 모든 future shared_future 가 준비 상태가 될 때 준비되는 future 객체를 생성합니다. 입력된 future shared_future 가 유효하지 않을 경우 동작은 정의되지 않습니다.

특히, Sequence std:: vector < typename std:: iterator_traits < InputIt > :: value_type > (1) 에 대해, 그리고 std:: tuple < std:: decay_t < Futures > ... > (2) 에 대해 가정합니다. 이 함수 템플릿은 Sequence 를 포함하는 공유 상태를 생성하고, 그 공유 상태를 참조하는 future를 반환합니다. 각 입력 future 는 공유 상태 내 Sequence 의 해당 객체로 이동되고, 각 입력 shared_future 는 공유 상태 내 Sequence 의 해당 객체로 복사됩니다. Sequence 내 객체의 순서는 인수의 순서와 일치합니다.

1) 이 함수는 다음 조건이 충족되지 않는 한 오버로드 해결에 참여하지 않습니다: InputIt 의 값 타입(즉, typename std:: iterator_traits < InputIt > :: value_type )이 std::experimental::future 또는 std::experimental::shared_future 인 경우에만.
2) 모든 인수가 (cv 한정자가 있을 수 있는) std::experimental::shared_future 또는 cv 비한정 std::experimental::future 인 경우에만 이 함수는 오버로드 해결에 참여합니다. (공식적으로, Futures 의 모든 타입 Fn 에 대해, std:: remove_reference_t < Fn > std:: experimental :: future < Rn > 이거나, std:: decay_t < Fn > std:: experimental :: shared_future < Rn > 입니다.)

이 호출 이후에는 모든 입력 future 가 더 이상 유효하지 않으며; 모든 입력 shared_future 는 계속 유효합니다.

반환값

호출에 의해 생성된 공유 상태를 참조하는 future . 이 future는 항상 valid ( ) 상태이며, 호출에 사용된 모든 입력 future shared_future 가 준비 상태가 되면 준비 상태가 됩니다.

1) 범위가 비어 있는 경우(즉, first == last ), 반환된 future 는 빈 벡터를 포함하며 즉시 준비 상태가 됩니다.
2) 인수가 제공되지 않으면 future<std::tuple<>> 가 반환되며 즉시 준비 상태가 됩니다.