在Mac OS Sierra(10.12.6)上玩过Clang和stdc ++
$ clang++ --version
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
这里说明: http://en.cppreference.com/w/cpp/thread/promise/~promise:
放弃共享状态:
- 如果共享状态已准备就绪,请将其释放。
- 如果共享状态尚未就绪,则存储std :: future_error类型的异常对象,其错误条件为std :: future_errc :: broken_promise,使共享状态准备就绪并将其释放。
IMO,很明显,如果承诺被破坏,未来:: get()必须提出异常并取消等待。这个C ++代码块并没有引发异常:
auto p = std::make_unique<std::promise<std::string>>();
// getting a future and deleting the promise should make that
// future ready and raise an exception
{
auto f = p->get_future();
p.release();
f.get(); // must raise an exception
}
我刚刚在stdc ++ lib实现中发现了一个错误吗?
已解决:作为G.M.我指出我将release
与reset
混为一谈。