Пространства имён
Варианты
Действия

std::stacktrace_entry::current

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
<tbody> </tbody>
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)    // значения элемента относятся к расположению вызывающей функции
    {}
    src_rec(int i) : // значения элемента относятся к этому местоположению
        dummy(i)
    {}
    src_rec(double)  // значения элемента относятся к этому местоположению
    {}
};

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 со значениями, определёнными реализацией
(public функция-элемент) [править]
[static]
получает текущую трассировку стека или её заданную часть
(public static функция-элемент std::basic_stacktrace<Allocator>) [править]