निम्नलिखित कोड:जीसीसी बनाम variadic तर्क के साथ साथ एक ही प्रकार के अतिरिक्त तर्क के साथ आंशिक विशेषज्ञता पर बजना व्यवहार
#include <cstddef>
template <size_t N,
typename T,
T first,
T... rest>
struct A {
};
template<typename T,
T... args>
struct A<0, T, args...> {
};
int main() {
A<0, int, 1> a0;
A<2, int, 1, 2> a2;
return 0;
}
... g++
(संस्करण 5.1.0
और 5.3.0
) के साथ संकलन नहीं है की वजह से:
error: partial specialization is not more specialized than the primary template because it replaces multiple parameters with a pack expansion
... लेकिन clang
के साथ संकलित करता है।
क्या इस तरह के आंशिक विशेषज्ञता घोषित करने की अनुमति है?
साइड नोट: असल में, विशेषज्ञता A<0, int>
दोनों खतरनाक है क्योंकि संकलक (टेम्पलेट तर्कों की गलत संख्या) के साथ संकलन करने में विफल रहता है।
अनुमति देने के लिए 'एक <0, int>', आपको पहले टेम्पलेट बदलना होगा। विशेषज्ञता के लिए बहुत देर हो चुकी है। – Jarod42
@ जारोड 42 हां मुझे पता है कि टेम्पलेट का इस तरह का तात्कालिकता गलत है, मैं आंशिक विशेषज्ञता के बारे में पूछ रहा हूं, केवल 'टी' के साथ आंशिक विशेषज्ञता के बारे में पूछ रहा हूं, 'जी ++' में त्रुटि बढ़ाना, लेकिन 'क्लैंग' नहीं करना (प्रश्न बनाने के लिए फिर से व्यवस्थित करना यह स्पष्ट है)। – Holt
जीसीसी सही है। यह प्रति बीआर 14 9 5] (http://wg21.link/cwg1495) (कुछ हद तक असंतोषजनक है, क्योंकि यह जीसीसी के रखरखाव द्वारा रिपोर्ट किया गया था) का खराब गठबंधन है। –