Namespaces
Variants

std::experimental:: source_location

From cppreference.net
Definido en el encabezado <experimental/source_location>
struct source_location ;
(biblioteca fundamentals TS v2)

La clase source_location representa cierta información sobre el código fuente, como nombres de archivo, números de línea y nombres de función. Anteriormente, las funciones que deseaban obtener esta información sobre el sitio de llamada (para propósitos de registro, pruebas o depuración) debían usar macros para que las macros predefinidas como __LINE__ y __FILE__ se expandieran en el contexto del llamador. La clase source_location proporciona una alternativa mejor.

Contenidos

Funciones miembro

Creación
construye un nuevo source_location con valores definidos por la implementación
(función miembro pública)
[static]
construye un nuevo source_location
(función miembro estática pública)
Otras funciones miembro especiales
(destructor)
(implicitly declared)
destruye un source_location
(función miembro pública)
operator=
(implicitly declared)
operadores de asignación de copia/movimiento declarados implícitamente
(función miembro pública)
Acceso a campos
devuelve el número de línea representado por este objeto
(función miembro pública)
devuelve el número de columna representado por este objeto
(función miembro pública)
devuelve el nombre de archivo representado por este objeto
(función miembro pública)
devuelve el nombre de la función representada por este objeto, si existe
(función miembro pública)

Ejemplo

#include <experimental/source_location>
#include <iostream>
#include <string_view>
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!");
}

Salida posible:

info:main.cpp:15 Hello world!