Espacios de nombres
Variantes
Acciones

std::source_location::current

De cppreference.com
 
 
Biblioteca de servicios
 
 
static consteval source_location current() noexcept;
(desde C++20)

Construye un nuevo objeto source_location que corresponde a la ubicación del sitio de llamada.

Contenido

[editar] Parámetros

(Ninguno)

[editar] Valor de retorno

Si current() se invoca directamente (vía una llamada a función que nombra a current()), devuelve un objeto source_location con valores definidos por la implementación que representan la ubicación de la llamada. Los valores deberán ser afectados por la directriz de preprocesador #line de la misma manera que las macros predefinidas __LINE__ y __FILE__.

Si current() se usa en un inicialiador de miembro por defecto, el valor de retorno corresponde a la ubicación de la definición del contructor o la inicialización de agregado que inicializa el dato miembro.

Si current() se usa en un argumento por defecto, el valor de retorno corresponde a la ubicación de la llamada a current() en el sitio de llamada.

Si current() se invoca de cualquier otra manera, el valor de retorno no está especificado.

[editar] Notas

std::source_location::current típicamente require la implementación integrada del compilador.

[editar] Ejemplo

#include <source_location>
#include <iostream>
 
struct src_rec {
    std::source_location ubicacion = std::source_location::current();
    int dummy = 0;
 
    src_rec(std::source_location ubi = std::source_location::current()) :
        ubicacion(ubi)  // valores del miembro se refieren a la ubicación de la función llamante
    {}
    src_rec(int i) : // valores del miembro se refieren a esta ubicación
        dummy(i)
    {}
    src_rec(double)  // valores del miembro se refieren a esta ubicación
    {}
};
 
std::source_location src_clone(std::source_location a = std::source_location::current())
{
    return a;
}
 
std::source_location src_make()
{
    std::source_location b = std::source_location::current();
    return b;
}
 
int main()
{
    src_rec srec0;
    src_rec srec1(0);
    src_rec srec2(0.0);
    auto s0 = std::source_location::current();
    auto s1 = src_clone(s0);
    auto s2 = src_clone();
    auto s3 = src_make();
 
    std::cout
        << srec0.ubicacion.line() << ' ' << srec0.ubicacion.function_name() << '\n'
        << srec1.ubicacion.line() << ' ' << srec1.ubicacion.function_name() << '\n'
        << srec2.ubicacion.line() << ' ' << srec2.ubicacion.function_name() << '\n'
        << s0.line() << ' ' << s0.function_name() << '\n'
        << s1.line() << ' ' << s1.function_name() << '\n'
        << s2.line() << ' ' << s2.function_name() << '\n'
        << s3.line() << ' ' << s3.function_name() << '\n';
}

Posible salida:

31 main
12 src_rec
15 src_rec
34 main
34 main
36 main
25 src_make

[editar] Véase también

Construye un nuevo objeto de tipo source_location con valores definidos por la implementación.
(función miembro pública) [editar]