promise.get_future() 是否必须在设置值之前调用?

Does promise.get_future() have to be called before setting a value?

来自http://www.cplusplus.com/reference/future/promise/get_future/

After this function has been called, the promise is expected to make its shared state ready at some point [...]

我不确定这是否意味着此操作顺序是强制性的:

  1. get_future()
  2. set_value()

是不是也可以从promise中得到future,只有在设置了一个值之后?

据我所知没有这样的限制。 std::promise::set_value 导致错误的仅有两种情况是:

  1. Promise 对象没有共享状态(这可能在移动 promise 对象时发生):

    promise<int> p;
    auto p2 = std::move(p);
    p.set_value(42); // error
    
  2. 共享状态已经存储了一个值或异常:

    promise<int> p;
    p.set_value(0);
    p.set_value(42); // error
    

    promise<int> p;
    try 
    {
        throw std::runtime_error("Some error");
    } 
    catch(...) 
    {
        p.set_exception(std::current_exception());
        p.set_value(42); // error
    }
    

但是之前调用get_future没有限制