铿锵声stdc ++:潜在的c ++ future / promise bug

时间:2017-09-06 11:12:10

标签: c++ c++11 promise future

在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.我指出我将releasereset混为一谈。

0 个答案:

没有答案