\
template <class... Args> \
struct [[maybe_unused]] a_func \
{ \
a_func() = delete; \
\
explicit a_func( \
fmt::format_string<Args...> a_fmt, \
Args&&... a_args, \
std::source_location a_loc = std::source_location::current()) \
{ \
spdlog::log( \
spdlog::source_loc{ \
a_loc.file_name(), \
static_cast<int>(a_loc.line()), \
a_loc.function_name() }, \
spdlog::level::a_type, \
a_fmt, \
std::forward<Args>(a_args)...); \
} \
}; \
\
template <class... Args> \
a_func(fmt::format_string<Args...>, Args&&...) -> a_func<Args...>;