Namespaces
Variants

std::experimental:: source_location

From cppreference.net
Определено в заголовочном файле <experimental/source_location>
struct source_location ;
(библиотека fundamentals TS v2)

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

Содержание

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

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

Пример

#include <experimental/source_location>
#include <iostream>
#include <string_view>
void log(const std::string_view message,
         const std::experimental::source_location location =
               std::experimental::source_location::current())
{
    std::cout << "info:"
              << location.file_name() << ':'
              << location.line() << ' '
              << message << '\n';
}
int main()
{
    log("Hello world!");
}

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

info:main.cpp:15 Hello world!