को देखते हुए:पूर्णांक प्रकार के "हस्ताक्षरित-नेस" के आधार पर आंशिक टेम्पलेट विशेषज्ञता?
unsigned n;
f(n); // warning: comparison n >= 0 is always true
वहाँ किसी भी चालाक रास्ता तुलना n >= 0
जब T
एक unsigned
प्रकार है करने के लिए नहीं है:
template<typename T>
inline bool f(T n) {
return n >= 0 && n <= 100;
}
जब एक unsigned
प्रकार के साथ प्रयोग किया एक चेतावनी उत्पन्न करता है? मैंने आंशिक टेम्पलेट विशेषज्ञता जोड़ने की कोशिश की:
template<typename T>
inline bool f(unsigned T n) {
return n <= 100;
}
लेकिन जीसीसी 4.2.1 पसंद नहीं है। (मुझे नहीं लगता था कि आंशिक टेम्पलेट विशेषज्ञता का प्रकार वैसे भी कानूनी होगा।)
नोट समारोह टेम्पलेट्स, केवल पूर्ण विशेषज्ञता के लिए कोई आंशिक विशेषज्ञता नहीं है। उस ने कहा, पूर्ण विशेषज्ञता आमतौर पर फ़ंक्शन टेम्पलेट्स के लिए एक बुरा विचार है क्योंकि जो विशिष्ट हो जाता है, जो अधिभारित हो जाता है, और ओवरलोड लोड रिज़ॉल्यूशन का निर्धारण करने का निर्णय जटिल और जटिल है। शुक्र है, अधिभार और SFINAE (प्रतिस्थापन विफलता एक त्रुटि नहीं है) यहां पर्याप्त हैं। –
मुझे इस पर क्लैंग 3.8 (या जीसीसी 8.0) से कोई चेतावनी नहीं मिली है। यदि मैं 'f' पर टेम्पलेट को हटा देता हूं तो मुझे यह मिलता है। क्या '-वैटोलॉजिकल-तुलना' का एक संस्करण है जो टेम्पलेट इंस्टॉलेशन को मानता है? – user2023370