C 11 SFINAE의 즉시 컨텍스트
C 11 표준은 SFINAE(Substitution Failure Is Not An Error)를 조건부 활성화 기술로 정의합니다. 또는 템플릿 인수 추론을 기반으로 코드를 비활성화합니다. 섹션 14.8.2/8에는 SFINAE로 이어지는 "하드" 컴파일 오류 또는 "소프트" 오류가 발생하는 대체 실패 조건이 간략하게 설명되어 있습니다.
표준은 이 섹션에서 "즉시 컨텍스트"를 참조합니다. , 이는 함수 유형 및 해당 템플릿 매개변수 유형의 즉각적인 컨텍스트에 있는 유효하지 않은 유형 및 표현식만이 추론 실패를 일으킬 수 있음을 나타냅니다. 그러나 "즉시 컨텍스트"의 정의는 명시적이지 않습니다.
즉시 컨텍스트에 대한 결정 절차
즉시 컨텍스트에서 대체 오류가 발생하는지 확인하려면 다음을 고려하세요. 다음:
템플릿 인수 대체에 필요한 모든 템플릿과 암시적으로 정의된 함수가 미리 생성된다고 상상해 보세요. 이 준비 중에 발생하는 오류는 즉각적인 컨텍스트가 아니며 하드 컴파일 오류가 발생합니다.
준비 단계가 성공적으로 완료되면 대체 중 후속 오류(예: 인스턴스화된 템플릿 또는 암시적으로 정의된 함수 참조) 기능 템플릿 서명에서) 오류를 구성하지는 않지만 감점을 초래합니다.
예
예 1:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; func<A<int&>>(...);
이 예에서는 인스턴스화 A
예 2:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; template<> struct A<char> {}; func<A<char>>(...);
이 예에서는 준비 단계는 Achar를 성공적으로 인스턴스화합니다. 대체 중에 A
위 내용은 C 11 SFINAE에서 '즉시 컨텍스트'를 정의하는 것은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!