호출되지 않은 템플릿 함수에도 불구하고 Static_Assert 실패
C 0x에서 사용되지 않은 static_assert 선언이 있는 템플릿은 컴파일 실패를 초래할 수 있습니다. 다음 코드를 고려해 보세요.
template <typename T> inline T getValue(AnObject&) { static_assert(false, "this function has to be implemented for the desired type"); }
놀랍게도 이 코드는 다음 오류와 함께 실패합니다.
static_assertion failed "this function has to be implemented for the desired type"
직관적으로 컴파일러는 템플릿 함수가 호출되는 경우에만 템플릿 함수를 인스턴스화할 것으로 예상할 수 있습니다. 그러나 C 표준은 [temp.res]/8에서 달리 지정합니다.
유효한 특수화가 생성될 수 있는 템플릿 정의에 대해서는 진단이 발행되지 않습니다. 템플릿 정의에 대해 유효한 특수화를 생성할 수 없고 해당 템플릿이 인스턴스화되지 않은 경우 템플릿 정의의 형식이 잘못되어 진단이 필요하지 않습니다.
컴파일하는 유효한 특수화가 없기 때문에 컴파일러가 허용됩니다. 인스턴스화 여부에 관계없이 템플릿 정의를 거부합니다.
이 문제를 해결하려면 다음과 같이 코드를 재정의할 수 있습니다.
template<typename T> struct foobar : std::false_type { }; template <typename T> inline T getValue(AnObject&) { static_assert(foobar<T>::value, "this function has to be implemented for the desired type"); }
이 수정은 진단을 인스턴스화로 연기합니다. 적절한 foobar
위 내용은 C 0x의 호출되지 않은 템플릿 함수에서 정적 어설션이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!