16template <
typename V,
typename T>
26 template <
typename...
Args>
28 if constexpr (
sizeof...(Args) == 0) {
40 template <
typename...
Args>
49 template <
bool Condition>
52 return std::move(
Get());
54 return std::as_const(
Get());
66 template <
bool SymmetricTransfer,
bool Shared>
68 if constexpr (std::is_copy_constructible_v<wrap_void_t<V>>) {
70 const auto ref = caller.GetRef();
75 return BaseCore::SetResultImpl<SymmetricTransfer, Shared>();
84 return BaseCore::SetResultImpl<SymmetricTransfer, Shared>();
85 }
else if constexpr (std::is_move_constructible_v<wrap_void_t<V>>) {
89 return BaseCore::SetResultImpl<SymmetricTransfer, Shared>();
Reference counting interface.
yaclib_std::atomic_uintptr_t _callback
void Store(Args &&... args)
YACLIB_INLINE auto Impl(InlineCore &caller) noexcept
ResultCore(std::in_place_t, Args &&... args)
typename T::template Result< V > Result
decltype(auto) MoveOrConst()
~ResultCore() noexcept override
virtual Result Retire()=0
#define YACLIB_ASSERT(cond)
#define YACLIB_PURE_VIRTUAL()
Contract< V, T > MakeContract()
Creates related future and promise.
constexpr auto * DownCast(From *from) noexcept