If you follow the comment thread underneath that article, you would see that other experts do not agree:
Martinho Fernandes:
I don't see why this is a requirement for all futures: this particular requirement you quote is from the requirements upon std::async
, not the requirements on std::future
. The only requirement on the destructor of std::future
is that it "releases the shared state". It happens that the shared state from std::async
adds the requirement you quote, but no other shared state in the standard library has such a requirement.
Herb Sutter:
tl;dr: Martinjo already answered this correctly -- the article is not correct, the blocking applies only to futures returned from std::async
with launch policy launch::async
.
Scott said:
and in 30.6.8/5, we see that [...] This is a requirement for any future object, not just the ones returned from std::async
calls.
This does not follow. 30.6.8 is the specification of std::async
. Anything said in there is specific to std::async
.
But as Martinho already correctly said, this exception is in clause 30.6.8 "Function template async" only, and does not apply to futures in general.
Conclusion: I do not think you will be able to find the example you are looking for.