struct source_location;
(since C++20)The std::source_location
class represents certain information about the source code, such as file names, line numbers, and function names. Previously, functions that desire to obtain this information about the call site (for logging, testing, or debugging purposes) must use macros so that predefined macros like __LINE__ and __FILE__ are expanded in the context of the caller. The std::source_location
class provides a better alternative.
std::source_location
meets the DefaultConstructible, CopyConstructible, CopyAssignable, Destructible and Swappable requirements.
Additionally, the following conditions are true:
It is intended that std::source_location
has a small size and can be copied efficiently.
It is unspecified whether the copy/move constructors and the copy/move assignment operators of std::source_location
are trivial and/or constexpr.
source_location
with implementation-defined values
source_location
corresponding to the location of the call site
#include <iostream> #include <source_location> #include <string_view> void log(const std::string_view message, const std::source_location location = std::source_location::current()) { std::clog << "file: " << location.file_name() << '(' << location.line() << ':' << location.column() << ") `" << location.function_name() << "`: " << message << '\n'; } template<typename T> void fun(T x) { log(x); // line 20 } int main(int, char*[]) { log("Hello world!"); // line 25 fun("Hello C++20!"); }
Possible output:
file: main.cpp(25:8) `int main(int, char**)`: Hello world! file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20![edit] See also changes the source code's line number and, optionally, the current file name
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4