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.