+/** Set a promise/result from a future/result
+ *
+ * Roughly this does:
+ *
+ * <pre>promise.set_value(future);</pre>
+ *
+ * but it takes care of exceptions and works with `void`.
+ *
+ * We might need this when working with generic code because
+ * the trivial implementation does not work with `void` (before C++1z).
+ *
+ * @param promise output (a valid future or a result)
+ * @param future input (a ready/waitable future or a valid result)
+ */
+template<class P, class F> inline
+void setPromise(P& promise, F&& future)
+{
+ fulfillPromise(promise, [&]{ return std::forward<F>(future).get(); });
+}
+