을 감안할 때 :정수형의 "signed-ness"에 기반한 부분 템플릿 전문화?
unsigned n;
f(n); // warning: comparison n >= 0 is always true
비교 T
가 unsigned
유형입니다 n >= 0
을 할 수없는 어떤 영리한 방법이 있나요 : unsigned
유형을 사용
template<typename T>
inline bool f(T n) {
return n >= 0 && n <= 100;
}
경고를 생성? 나는 부분 템플릿 특수화를 추가하는 시도 :
template<typename T>
inline bool f(unsigned T n) {
return n <= 100;
}
하지만 GCC 4.2.1 그렇게 좋아하지 않는다. (나는 어쨌든 종류의 부분 템플릿 전문화가 합법적이라고 생각하지 않았습니다.)
참고를 참조하십시오. 즉, 특수화 된 기능, 과부하가 발생하는 기능 및 과부하 해결 방법을 사용하여 무엇을 사용할지 결정하는 규칙이 복잡하고 복잡하기 때문에 전체 전문화는 일반적으로 함수 템플릿에 나쁜 개념입니다. 고맙게도 과부하 및 SFINAE (대체 오류는 오류가 아님)로 충분합니다. –
이것에 대해 Clang 3.8 (또는 GCC 8.0)으로부터 경고를받지 못했습니다. 'f'에서 템플릿을 지우면 얻을 수 있습니다. 템플릿 인스턴스화를 고려한'-Wtautological-compare' 버전이 있습니까? – user2023370