Feature Test Macro는 C++에서 제공하는 기능을 현재 사용 중인 컴파일러가 지원하는지 그렇지 않은지 여부를 테스트하기 위한 전처리 명령어(매크로)다.
Attributes
__has_cpp_attribute( attribute-token )
- 현재 사용하는 컴파일러가 attribute-token에 지정된 attribute를 지원하는지 체크
- #if, #else, #ifdef, #ifndef를 이용해 컴파일 타임에 지원 여부 체크 가능
int main()
{
#if __has_cpp_attribute(carries_dependency)
std::cout << "this compiler supports 'carries_dependency'" << std::endl;
#endif
#if __has_cpp_attribute(deprecated)
std::cout << "this compiler supports 'deprecated'" << std::endl;
#endif
#if __has_cpp_attribute(fallthrough)
std::cout << "this compiler supports 'fallthrough'" << std::endl;
#endif
}
※ [C++20] 어트리뷰트(Attribute) 관련 글 보기
Language Features
#include <iostream>
#include <span>
#include <chrono>
// https://en.cppreference.com/w/cpp/feature_test
int main()
{
// 언어 지원 여부 체크
#ifdef __cpp_concepts
std::cout << "support concepts feature" << std::endl;
#endif
#ifdef __cpp_modules
std::cout << "support modules feature" << std::endl;
#endif
}
Library features
// 라이브러리 지원 여부 체크
#ifdef __cpp_lib_span // span 헤더 인클루드 필요
std::cout << "support span" << std::endl;
#endif
#ifdef __cpp_lib_chrono // span 헤더 인클루드 필요
std::cout << "support chrono" << std::endl;
#endif