Насколько я вижу, такого ограничения нет. Единственные два случая, когда std::promise::set_value
приводит к ошибке:
Объект обещания не имеет общего состояния (это может произойти при перемещении объекта обещания):
promise<int> p;
auto p2 = std::move(p);
p.set_value(42); // error
В общем состоянии уже хранится значение или исключение:
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
раньше.