поведение std :: async с политикой std :: launch :: async

У меня есть вопрос о поведенииstd::async функция сstd::launch::async политика иstd::future объект возвращен из асинхронного.

В следующем коде основной поток ожидает завершенияfoo() в теме, созданнойasync вызов.

#include <thread>
#include <future>
#include <iostream>

void foo()
{
  std::cout << "foo:begin" << std::endl;
  std::this_thread::sleep_for(std::chrono::seconds(10));
  std::cout << "foo:done" << std::endl;
}

int main()
{
  std::cout << "main:begin" << std::endl;
  {
    auto f = std::async(std::launch::async, foo);
    // dtor f::~f blocks until completion of foo()... why??
  }
  std::this_thread::sleep_for(std::chrono::seconds(2));
  std::cout << "main:done" << std::endl;
}

И я знаюhttp://www.stdthread.co.uk/doc/headers/future/async.html говорит

Деструктор последнего объекта будущего, связанный с асинхронным состоянием возвращенного std :: future, должен блокироваться, пока будущее не будет готово.

Мой вопрос:

Q1. Соответствует ли это поведение текущему стандарту C ++?Q2. Если ответ Q1 - да, какие утверждения говорят это?

Ответы на вопрос(1)

Ваш ответ на вопрос