feature_test — 라이브러리 기능 테스트 매크로

feature_test — 라이브러리 기능 테스트 매크로 (Library feature-test macros)

**라이브러리 기능 테스트 매크로(library feature-test macro)**는 표준 라이브러리의 어떤 기능이 사용 가능한지 확인하기 위한 매크로들이에요.

다음 매크로들 각각은 헤더 <version> 또는 표에 지정된 해당 헤더 중 하나가 포함되면 정의돼요.

출처: cppreference

본문

기능 테스트 매크로는 다음과 같은 이름을 가져요.

#define __cpp_lib_<feature> <yyyymmL>

예를 들어:

__cpp_lib_expected        // std::expected (C++23)
__cpp_lib_ranges          // Ranges (C++20)
__cpp_lib_format          // std::format (C++20)
__cpp_lib_optional        // std::optional (C++17)

강화된(hardened) 구현은 추가 매크로를 정의해요.

사용법

컴파일 타임에 어떤 기능이 있는지 조건부로 확인할 때 사용해요.

#include <version>

#if defined(__cpp_lib_expected)
#include <expected>
// std::expected를 사용하는 코드
#else
// 폴백 구현
#endif

참고 (Notes)

"Value" 열의 각 값은 패턴 "yyyymmL"을 따르는데, "yyyy"는 연도, "mm"는 해당 기능 집합이 표준화에 채택된 달이에요. 일부 값은 표준화 이후 증가했어요.

// 예: C++20의 ranges는 채택 시점 값
#if __cpp_lib_ranges >= 201911L
// 최신 ranges 기능 사용
#endif

주요 용도:

  • 조건부 컴파일 — 특정 기능의 유무에 따라 다른 코드 경로
  • 최소 버전 검사 — 매크로 값을 비교해 기능이 특정 버전 이상인지 확인
  • 이식성 — 여러 컴파일러/표준 라이브러리에서 안전하게 컴파일

기능 테스트 매크로는 표준 라이브러리 기능이 실제로 사용 가능한지를 컴파일 타임에 검사하는 표준적인 방법이에요. <version> 헤더를 포함하고 __cpp_lib_* 매크로를 검사하면 이식성 있는 조건부 코드를 작성할 수 있어요.

더 알아보기 (Learn more)

cppreference