태그: SFINAE
10편
-
C++ 템플릿 메타프로그래밍 심화 — SFINAE·타입 특성·태그 디스패치
템플릿 메타프로그래밍(TMP)에서 컴파일러가 오버로드 후보를 거르는 SFINAE 규칙, type_traits의 구현 원리, 태그 디스패치와 if constexpr의 선택 기준, 컴파일 타임 계산을 어디에 둘지를 라이브러리 설계 관점에서 정리합니다.
-
C++ 템플릿 에러 메시지 읽는 법: 첫 줄·note·candidate 순서와 자주 나오는 패턴
수백 줄짜리 C++ 템플릿 에러에서 맨 위 첫 줄, note: because, candidate 목록 순으로 원인을 찾는 방법을 설명하고, no matching function이나 incomplete type 같은 10가지 패턴과 GCC·Clang·MSVC 메시지 차이를 비교합니다.
-
C++ <type_traits>로 타입 검사·변환하기: SFINAE 원리, enable_if 위치, decay와 커스텀 traits
C++ <type_traits>로 컴파일 타임에 타입을 검사·변환하는 방법을 정리합니다. SFINAE 동작 원리, enable_if 위치별 차이, decay·remove_reference 활용법과 실전 함정을 다룹니다.
-
C++ SFINAE vs Concepts | 언제 마이그레이션해야 할까
enable_if로 쓴 SFINAE 코드를 C++20 Concepts와 requires 표현식으로 옮기면 무엇이 좋아지고 무엇이 어려워지는지 같은 예제로 비교합니다. 에러 메시지 품질, 레거시 코드 호환성, 과도한 제약과 순환 의존 같은 마이그레이션 함정을 다룹니다.
-
SFINAE 패턴 정리: enable_if, void_t, Detection Idiom과 Concepts로 옮길 시점
C++ SFINAE 정리. enable_if, void_t와 표현식 검사, Detection Idiom과 is_detected, 템플릿 오버로드 분기, 레거시 SFINAE 코드를 C++20 Concepts로 옮기는 기준을 다룹니다.
-
C++ enable_if와 SFINAE: 템플릿 조건부 활성화 패턴과 C++20 Concepts로 바꾸기
std::enable_if를 이용한 SFINAE 기반 템플릿 조건부 활성화 원리와 반환 타입·템플릿 매개변수·함수 매개변수 활용 패턴, C++20 Concepts로의 전환까지 실전 코드로 정리합니다.
-
C++ 메타프로그래밍 고급 | SFINAE·Concepts·constexpr·타입 트레이트 가이드
C++ 메타프로그래밍: SFINAE std::enable_if 타입 제약, Concepts C++20 requires, constexpr 컴파일 타임 연산, 타입 트레이트 std::is_integral.
-
C++ type traits 활용: 표준 traits, std::enable_if, 커스텀 traits 작성
정수만 받아야 할 템플릿에 vector를 넘겨 긴 에러가 나는 상황에서 출발해 is_integral·decay 같은 표준 traits, enable_if를 두는 위치별 차이, void_t로 멤버 존재를 검사하는 커스텀 traits를 다룹니다. if constexpr로 대체할 시점도 설명합니다.
-
C++ 템플릿 특수화: 모든 타입에 같은 로직을 쓸 수 없을 때 완전·부분 특수화로 푸는 법
bool만 true/false로 출력하고 싶을 때처럼 타입마다 다른 동작이 필요할 때 완전 특수화와 부분 특수화를 어떻게 나눠 쓰는지 예제로 보여줍니다. 함수 템플릿은 왜 부분 특수화 대신 오버로드를 써야 하는지, ODR 위반과 모호성 에러도 다룹니다.
-
C++ 템플릿 기초: 함수·클래스 템플릿, 가변 인자, SFINAE에서 Concepts까지
타입마다 복사하던 함수를 template<typename T>로 합치는 것부터 시작해 타입 추론 규칙과 max(3, 3.14)가 실패하는 이유, 템플릿 링크 에러, 가변 인자 템플릿과 fold expression, 특수화, SFINAE와 Concepts까지 단계적으로 설명합니다.