diff --git a/tdactor/td/actor/PromiseFuture.h b/tdactor/td/actor/PromiseFuture.h index 580a3b8a6..59c034150 100644 --- a/tdactor/td/actor/PromiseFuture.h +++ b/tdactor/td/actor/PromiseFuture.h @@ -184,23 +184,33 @@ class SafePromise; template class Promise; -constexpr std::false_type is_promise_interface(...); +constexpr inline std::false_type is_promise_interface(...) { + return {}; +} template -constexpr std::true_type is_promise_interface(const PromiseInterface &promise); +constexpr std::true_type is_promise_interface(const PromiseInterface &promise) { + return {}; +} template -constexpr std::true_type is_promise_interface(const Promise &promise); +constexpr std::true_type is_promise_interface(const Promise &promise) { + return {}; +} template constexpr bool is_promise_interface() { return decltype(is_promise_interface(std::declval()))::value; } -constexpr std::false_type is_promise_interface_ptr(...); +constexpr inline std::false_type is_promise_interface_ptr(...) { + return {}; +} template -constexpr std::true_type is_promise_interface_ptr(const unique_ptr &promise); +constexpr std::true_type is_promise_interface_ptr(const unique_ptr &promise) { + return {}; +} template constexpr bool is_promise_interface_ptr() { @@ -231,6 +241,7 @@ template (), bool auto promise_interface_ptr(F &&f) { return std::forward(f); } + template (), bool> from_promise_interface = false> auto promise_interface_ptr(F &&f) { return td::make_unique(std::forward(f)))>>(