C의 인수 종속 조회 및 함수 템플릿
ADL(인수 종속 조회)은 컴파일러가 식별자를 검색할 수 있도록 하는 언어 기능입니다. 함수 호출의 인수와 연관된 네임스페이스 내. ADL은 일반적으로 함수를 찾지만 일부 시나리오에서는 함수 템플릿을 찾지 못합니다.
C 표준 설명
C 표준(2003)의 섹션 14.8.1.6에 나와 있습니다. that:
"그러나 명시적 템플릿 인수가 있는 함수 템플릿을 사용하면 호출의 구문 형식이 올바르지 않습니다. 호출 시점에 해당 이름이 표시되는 함수 템플릿이 없으면 호출은 구문적으로 올바른 형식이 아니며 인수 종속 조회가 적용되지 않습니다."
예
다음 예를 고려하세요.
namespace ns { struct foo {}; template<int i> void frob(foo const&) {} void non_template(foo const&) {} } int main() { ns::foo f; non_template(f); // This is fine. frob<0>(f); // This is not. }
main의 마지막 호출 (frob(f);)는 호출 범위에 frob라는 이름의 함수 템플릿이 표시되지 않기 때문에 컴파일에 실패합니다. ADL이 frob<0>을 찾을 수 없습니다. 함수 템플릿은 컴파일러 구문에 의해 유효한 함수 호출로 간주되지 않기 때문입니다.
추가 고려 사항
위 내용은 인수 종속 조회가 C에서 명시적 템플릿 인수가 있는 함수 템플릿을 찾지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!