Namespaces
Variants

std::source_location

С сайта ru.cppreference.net
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Утилиты программы
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
 
Определён в заголовке <source_location>
struct source_location;
(начиная с C++20)

Класс std::source_location представляет определённую информацию об исходном коде, такую как имена файлов, номера строк и имена функций. Ранее функции, желающие получить эту информацию о месте вызова (для целей журналирования, тестирования или отладки), должны были использовать макросы, чтобы предопределённые макросы, такие как __LINE__ и __FILE__, раскрывались в контексте вызывающей стороны. Класс std::source_location предоставляет лучшую альтернативу.

std::source_location удовлетворяет требованиям DefaultConstructible, CopyConstructible, CopyAssignable, Destructible и Swappable.

Кроме того, выполняются следующие условия true:

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

Предполагается, что std::source_location имеет небольшой размер и может эффективно копироваться.

Не уточняется, являются ли конструкторы копирования/перемещения и операторы присваивания копированием/перемещением std::source_location тривиальными и/или constexpr.

Функции-члены

Создание
создаёт новый source_location с определёнными реализацией значениями
(public member function)
[static]
создаёт новый source_location соответствующий местоположению точки вызова
(public static member function)
Доступ к полям
возвращает номер строки, представленный этим объектом
(public member function)
возвращает номер колонки, представленный этим объектом
(public member function)
возвращает имя файла, представленное этим объектом
(public member function)
возвращает имя функции, представленное этим объектом, если оно есть
(public member function)

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_source_location 201907L (C++20) Захват информации об исходном коде ( std::source_location )

Пример

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

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

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!

Смотрите также

изменяет номер строки исходного кода и, опционально, текущее имя файла
(директива препроцессора)
представление вычисления в stacktrace
(класс)