source_location — std::source_location

source_location — std::source_location

std::source_location 클래스는 **소스 코드에 대한 정보(파일 이름, 줄 번호, 열, 함수 이름)**를 나타내요. C++20에서 도입됐어요. <source_location> 헤더에 있어요.

디버깅·로깅·진단 메시지에 호출 위치를 자동으로 포함시킬 때 사용해요.

출처: cppreference

본문

// <source_location> 헤더, C++20
struct source_location;

사용 예

#include <source_location>
#include <iostream>

void log(const std::string& msg,
         const std::source_location& loc =
             std::source_location::current()) {
    std::cout << loc.file_name() << ":" << loc.line()
              << " [" << loc.function_name() << "] " << msg << '\n';
}

int main() {
    log("hello");   // 호출 위치가 자동 기록됨
}

주요 멤버

멤버 설명
current() 현재 호출 위치 반환 (정적)
file_name() 파일 이름
line() 줄 번호
column() 열 번호
function_name() 함수 이름

기본 인자로 활용

std::source_location::current()기본 인자로 쓰면, 호출 지점의 정보를 자동으로 캡처할 수 있어요.

void debug_print(const std::source_location loc =
                     std::source_location::current()) {
    std::cout << loc.function_name() << " @" << loc.line() << '\n';
}

void foo() { debug_print(); }   // "foo @<user line>"

특징

  • 매크로(__FILE__, __LINE__)보다 타입 안전하고 유연해요.
  • 로깅·assert·예외 메시지 등 진단 코드에 위치 정보를 깔끔하게 포함.

std::source_location은 함수가 호출된 소스 위치를 자동으로 얻어, 로깅과 진단을 개선하는 C++20 표준 타입이에요.

더 알아보기 (Learn more)

cppreference