#pragma once #if defined(__has_include) #if __has_include() && defined(__cpp_lib_expected) && (__cpp_lib_expected >= 202202L) #include #define HAS_STD_EXPECTED 1 #endif #endif #if defined(HAS_STD_EXPECTED) namespace Psc { template using expected = std::expected; template using unexpected = std::unexpected; template using bad_expected_access = std::bad_expected_access; using unexpect_t = std::unexpect_t; inline constexpr unexpect_t unexpect = std::unexpect; } #else #include "../3rd/tl/expected.hpp" namespace Psc { template using expected = tl::expected; template using unexpected = tl::unexpected; template using bad_expected_access = tl::bad_expected_access; // tl 版本通常也有 unexpect_t / unexpect(名字可能略不同,按你的 tl/expected.hpp 实际为准) using unexpect_t = tl::unexpect_t; inline constexpr unexpect_t unexpect{}; } #endif #include #include namespace Psc { #ifdef WIN32 using ERROR_CODE_TYPE = int; #else using ERROR_CODE_TYPE = int; #endif ERROR_CODE_TYPE get_error_code(); void set_error_code(ERROR_CODE_TYPE code); std::string get_error_message(); std::string get_error_message(ERROR_CODE_TYPE ec); }