यह this प्रश्न पर एक फॉलो-अप है।विशेषज्ञताओं के मामले में खराब गठित कार्यक्रमों के कारण गार्ड पैरामीटर पैक की जांच की जाती है?
#include <type_traits>
template<typename T, typename... P, typename U = std::enable_if_t<std::is_integral<T>::value>>
void f() { static_assert(sizeof...(P) == 0, "!"); }
int main() {
f<int>();
}
यह कम्पाइल, लेकिन [temp.res]/8 के अनुसार यह कोई निदान आवश्यक बीमार का गठन है, की वजह से:
एक variadic टेम्पलेट के हर वैध विशेषज्ञता एक आवश्यकता है
निम्नलिखित कोड पर विचार करें खाली टेम्पलेट पैरामीटर पैक
अब इस थोड़ा अलग उदाहरण पर विचार करें:
#include <type_traits>
template<typename T, typename... P, typename U = std::enable_if_t<std::is_integral<T>::value>>
void f() { static_assert(sizeof...(P) == 0, "!"); }
template<>
void f<int, int>() { }
int main() {
f<int, int>();
}
इस मामले में एक वैध पूर्ण स्पष्ट विशेषज्ञता मौजूद है जिसके लिए पैरामीटर पैक खाली नहीं है।
क्या यह कहना पर्याप्त है कि कोड अब बीमार नहीं है?
नोट: मैं वापसी प्रकार या इसी तरह के std::enable_if_t
रखने जैसा वैकल्पिक तरीकों के लिए नहीं देख रहा हूँ।
आप कह रहे हैं कि 'static_assert' 'f' फ़ंक्शन टेम्पलेट विशेषज्ञता ** अमान्य **' sizeof ... (पी)! = 0' के मामले में बनाता है? बहुत दिलचस्प सवाल! –
@ डब्ल्यूएफ। हाँ। जुड़े प्रश्न में पहले उदाहरण के लिए विवरण शामिल हैं। मैं खुश हूँ कि आपको यह पसंद है। :-) – skypjack