| 949 | |
| 950 | template <typename T> |
| 951 | void select( |
| 952 | const Future<T>& future, |
| 953 | std::shared_ptr<Promise<Future<T>>> promise) |
| 954 | { |
| 955 | // We never fail the future associated with our promise. |
| 956 | assert(!promise->future().isFailed()); |
| 957 | |
| 958 | if (promise->future().isPending()) { // No-op if it's discarded. |
| 959 | if (future.isReady()) { // We only set the promise if a future is ready. |
| 960 | promise->set(future); |
| 961 | } |
| 962 | } |
| 963 | } |
| 964 | |
| 965 | } // namespace internal { |
| 966 |