Spec-Zone.ru › C++

std::source_location::current

static consteval source_location current() noexcept;
(с C++20)

Создаёт новый объект source_location соответствующий месту вызова.

Параметры

(нет)

Значение возврата

Если current() вызывается напрямую (через вызов функции, которая называет current()), он возвращает объект source_location с определёнными реализацией значениями, представляющими место вызова. Значения должны быть изменены директивой препроцессора #line таким же образом, как и предопределённые макросы __LINE__ и __FILE__.

Если current() используется в инициализаторе члена по умолчанию, значение возврата соответствует месту определения конструктора или инициализации агрегата, который инициализирует член данных.

Если current() используется в аргументе по умолчанию, значение возврата соответствует месту вызова current() в месте вызова.

Если current() вызывается любым другим способом, значение возврата не определено.

Примечания

std::source_location::current обычно требует встроенной реализации компилятора.

Пример

#include <source_location>
#include <iostream>
 
struct src_rec {
    std::source_location srcl = std::source_location::current();
    int dummy = 0;
 
    src_rec(std::source_location loc = std::source_location::current()) :
        srcl(loc)    // values of member refer to the location of the calling function
    {}
    src_rec(int i) : // values of member refer to this location
        dummy(i)
    {}
    src_rec(double)  // values of member refer to this location
    {}
};
 
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.srcl.line() << ' ' << srec0.srcl.function_name() << '\n'
        << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n'
        << srec2.srcl.line() << ' ' << srec2.srcl.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';
}

Возможный вывод:

31 int main()
12 src_rec::src_rec(int)
15 src_rec::src_rec(double)
34 int main()
34 int main()
36 int main()
25 std::source_location src_make()

См. также

(конструктор)
создаёт новый source_location с определёнными реализацией значениями
(публичный член-функция)
current
[статический]
получает текущий стек вызовов или его заданную часть
(публичный статический член-функция std::basic_stacktrace<Allocator>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/source_location/current

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API