|
|
|
@ -423,16 +423,17 @@ constexpr void UpdateCurrentResultReference<const Result>(Result result_referenc |
|
|
|
} // namespace ResultImpl |
|
|
|
|
|
|
|
#define DECLARE_CURRENT_RESULT_REFERENCE_AND_STORAGE(COUNTER_VALUE) \ |
|
|
|
[[maybe_unused]] constexpr bool HasPrevRef_##COUNTER_VALUE = \ |
|
|
|
[[maybe_unused]] constexpr bool CONCAT2(HasPrevRef_, COUNTER_VALUE) = \ |
|
|
|
std::same_as<decltype(__TmpCurrentResultReference), Result&>; \ |
|
|
|
[[maybe_unused]] auto& PrevRef_##COUNTER_VALUE = __TmpCurrentResultReference; \ |
|
|
|
[[maybe_unused]] Result __tmp_result_##COUNTER_VALUE = ResultSuccess; \ |
|
|
|
Result& __TmpCurrentResultReference = \ |
|
|
|
HasPrevRef_##COUNTER_VALUE ? PrevRef_##COUNTER_VALUE : __tmp_result_##COUNTER_VALUE |
|
|
|
[[maybe_unused]] Result CONCAT2(PrevRef_, COUNTER_VALUE) = __TmpCurrentResultReference; \ |
|
|
|
[[maybe_unused]] Result CONCAT2(__tmp_result_, COUNTER_VALUE) = ResultSuccess; \ |
|
|
|
Result& __TmpCurrentResultReference = CONCAT2(HasPrevRef_, COUNTER_VALUE) \ |
|
|
|
? CONCAT2(PrevRef_, COUNTER_VALUE) \ |
|
|
|
: CONCAT2(__tmp_result_, COUNTER_VALUE) |
|
|
|
|
|
|
|
#define ON_RESULT_RETURN_IMPL(...) \ |
|
|
|
static_assert(std::same_as<decltype(__TmpCurrentResultReference), Result&>); \ |
|
|
|
auto RESULT_GUARD_STATE_##__COUNTER__ = \ |
|
|
|
auto CONCAT2(RESULT_GUARD_STATE_, __COUNTER__) = \ |
|
|
|
ResultImpl::ResultReferenceForScopedResultGuard<__VA_ARGS__>( \ |
|
|
|
__TmpCurrentResultReference) + \ |
|
|
|
[&]() |
|
|
|
|