Namespaces
Variants

std::source_location

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación a tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
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 la llamada (con fines de registro, pruebas o depuración) debían usar macros para que macros predefinidas como __LINE__ y __FILE__ se expandieran en el contexto de la persona que llama. La clase std::source_location proporciona una alternativa mejor.

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

Además, las siguientes condiciones son true:

  • std::is_nothrow_move_constructible_v<std::source_location>,
  • std::is_nothrow_move_assignable_v<std::source_location>, y
  • std::is_nothrow_swappable_v<std::source_location>.

Se pretende que std::source_location tenga un tamaño pequeño y se pueda copiar de manera eficiente.

No se especifica si los constructores copia/movimiento y los operadores de asignación copia/movimiento de std::source_location son triviales y/o constexpr.

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)