#pragma once #include "TracyAwaitable.hpp" #include namespace tracy { template class Result : public BaseResultType { public: Result(BaseResultType&& result); #if DEBUG_TEMP ~Result(); #endif auto operator co_await(); }; template Result::Result(BaseResultType&& result) : BaseResultType(std::forward(result)) { #if DEBUG_TEMP std::osyncstream(std::cout) << "Result: constructor" << ", thread id: " << std::this_thread::get_id() << ", frame: " << GetProfiler().GetFrame() << std::endl; #endif } #if DEBUG_TEMP template Result::~Result() { std::osyncstream(std::cout) << "Result: destructor" << ", thread id: " << std::this_thread::get_id() << ", frame: " << GetProfiler().GetFrame() << std::endl; } #endif template auto Result::operator co_await() { #if DEBUG_TEMP std::osyncstream(std::cout) << "Result: operator co_await" << ", thread id: " << std::this_thread::get_id() << ", frame: " << GetProfiler().GetFrame() << std::endl; #endif return Awaitable(BaseResultType::operator co_await()); } } template class original_result, class type, class... arguments> struct std::coroutine_traits>, arguments...> { using promise_type = typename coroutine_traits, arguments...>::promise_type; };