From f1707c8b4d42976d69078397f40c6b7c7ce557f1 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 24 Dec 2021 00:02:16 +0300 Subject: [PATCH] Add implementation for Promise type-traits functions. --- tdactor/td/actor/PromiseFuture.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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)))>>(