Namespaces
Variants

std:: source_location

From cppreference.net
Utilities library
Definido en el encabezado <source_location>
struct source_location ;
(desde C++20)

La clase std::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 macros predefinidas como __LINE__ y __FILE__ se expandieran en el contexto del llamador. La clase std::source_location proporciona una alternativa mejor.

std::source_location cumple con los requisitos DefaultConstructible , CopyConstructible , CopyAssignable , Destructible y Swappable .

Además, las siguientes condiciones son true :

Se pretende que std::source_location tenga un tamaño reducido y pueda copiarse eficientemente.

No está especificado si los constructores de copia/traslado y los operadores de asignación de copia/traslado de std::source_location son triviales y/o constexpr.

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 correspondiente a la ubicación del sitio de llamada
(función miembro estática 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)

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_source_location 201907L (C++20) Captura de información del código fuente ( std::source_location )

Ejemplo

#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); // línea 20
}
int main(int, char*[])
{
    log("Hello world!"); // línea 25
    fun("Hello C++20!");
}

Salida posible:

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!

Véase también

cambia el número de línea del código fuente y, opcionalmente, el nombre del archivo actual
(directiva de preprocesamiento)
representación de una evaluación en un seguimiento de pila
(clase)