inline void set_result(Promise& p, void_) { p.set_result(); }
inline void set_result(Promise& p, T&& t) { p.set_result(std::forward<T>(t)); }