C 11 SFINAE에서 "즉시 컨텍스트"는 정확히 무엇인가요?
C 11 대체에서는 "즉시 컨텍스트" 개념이 중요합니다. 실패는 오류가 아니다(SFINAE) 관용구. C 11 표준에 따르면 함수 유형과 해당 템플릿 매개변수 유형의 "즉시 컨텍스트에서" 유효하지 않은 유형 및 표현식만 추론 실패로 이어질 수 있습니다.
초기 이해
표준은 다음과 같은 메모에서 제한된 힌트를 제공합니다. "대체 유형 및 표현식의 평가는 클래스 템플릿 전문화, 함수 템플릿 전문화, 암시적 오류와 같은 부작용을 초래할 수 있습니다. 함수 생성 등" 이러한 부작용은 "즉시 컨텍스트"의 일부로 간주되지 않습니다.
결정 절차
"즉시 컨텍스트"에서 대체 오류가 발생하는지 확인하려면 다음을 따르세요. 절차:
콘크리트 예
template<typename T> void func(typename T::type* arg);
func<A<int&>&>(nullptr); // T::type* is invalid, causing a hard error.
template<typename T> void func(typename T::type* arg);
template<> struct A<char> {};
func<A<char>>(nullptr); // T::type* is not defined, leading to a deduction failure.
결론
'즉각적인 맥락'은 다음과 같은 표현과 유형을 의미합니다. 필요한 사전 인스턴스화 단계를 넘어서 추가 템플릿이나 함수 생성을 요구하지 않고 해결됩니다. 이 사전 인스턴스화 단계에서 오류가 발생하면 하드 컴파일 오류가 발생하고, 후속 대체 단계에서 오류가 발생하면 추론 실패가 발생합니다.
위 내용은 C 11 SFINAE에서 '즉시 컨텍스트'를 구성하는 것은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!