diff --git a/include/spdlog/common.h b/include/spdlog/common.h index 1269c14af4..77a73b8675 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -16,8 +16,13 @@ #include #include +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + #ifdef SPDLOG_USE_STD_FORMAT - #include #if __cpp_lib_format >= 202207L #include #else @@ -100,6 +105,12 @@ #endif #endif +// Add constructor to spdlog::source_loc using std::source_location +#if __cpp_lib_source_location >= 201907L + #define SPDLOG_STD_SOURCE_LOCATION + #include +#endif + #ifndef SPDLOG_FUNCTION #define SPDLOG_FUNCTION static_cast(__FUNCTION__) #endif @@ -319,6 +330,13 @@ struct source_loc { line{line_in}, funcname{funcname_in} {} + #ifdef SPDLOG_STD_SOURCE_LOCATION + SPDLOG_CONSTEXPR source_loc(const std::source_location& loc) + : filename{loc.file_name()}, + line{static_cast(loc.line())}, + funcname{loc.function_name()} {} + #endif + SPDLOG_CONSTEXPR bool empty() const SPDLOG_NOEXCEPT { return line == 0; } const char *filename{nullptr}; int line{0};