auto fut = std::async(std::future::async, f);
이렇게 하면 첫번째 파라미터로 명시한 정책대로 논블락킹인데

std::async(std::future::async, f);
이렇게 리턴값을 변수에 저장하지않하면 블락킹되네요

왜 그런지 찾아보니 퓨처객체를 std::async가 리턴했으나 변수에 저장하지 않아 바로 파괴자가 호출되는데
이 파괴자가 f의 실행이 완료될 때까지 블락시키네요

왜 리턴값에 관심이 없는 경우에도 억지로 변수를 하나 써야하는지 모르겠어요