std::experimental::source_location

From cppreference.com
 
 
Technical specifications
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals TS v2)
Library fundamentals 3 (library fundamentals TS v3)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Extensions for concurrency 2 (concurrency TS v2)
Concepts (concepts TS)
Ranges (ranges TS)
Reflection (reflection TS)
Mathematical special functions (special functions TR)
 
 
 
struct source_location;
(library fundamentals TS v2)

The 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 source_location class provides a better alternative.

Member functions

Creation
constructs a new source_location with implementation-defined values
(public member function)
[static]
constructs a new source_location
(public static member function)
Other special member functions
(destructor)
(implicitly declared)
destructs a source_location
(public member function)
operator=
(implicitly declared)
Implicitly declared copy/move assignment operators
(public member function)
Field access
return the line number represented by this object
(public member function)
return the column number represented by this object
(public member function)
return the file name represented by this object
(public member function)
return the name of the function represented by this object, if any
(public member function)

Example

#include <iostream>
#include <string_view>
#include <experimental/source_location>
 
void log(const std::string_view& message, const std::experimental::source_location& location = std::experimental::source_location::current())
{
    std::cout << "info:"
              << location.file_name() << ":"
              << location.line() << " "
              << message << '\n';
}
 
int main()
{
    log("Hello world!");
}

Possible output:

info:main.cpp:15 Hello world!