निम्नलिखित निर्माण का क्या अर्थ है?सी ++ वैरैडिक टेम्पलेट असामान्य उदाहरण
#include <iostream>
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
std::cout << i << std::endl;
}
यह जीसीसी द्वारा संकलित है 4.4.5+ और जब निष्पादित आउटपुट 0
। -S
स्विच के साथ
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
return i;
}
और यह संकलित, विधानसभा उत्पादन कि मैं निम्नलिखित करने के लिए साफ पाने के लिए:
यह मेरी मशीन पर कुछ यादृच्छिक मूल्य आउटपुट करता है। 'I' की शुरुआत किसी भी तरह से अनदेखा की जाती है और' i' का प्रारंभिक मान मुद्रित होता है। – jrok
यह कानूनी नहीं दिखता है। 's' कभी परिभाषित नहीं किया गया है (और इसमें 'xxx' सदस्य नहीं है) और टेम्पलेट को खाली-खाली पैरामीटर दिए जाने चाहिए। (मैंने इसे जीसीसी 4.6.2 के साथ संकलित किया, और इसे '32767' मुद्रित किया गया, क्लैंग इसे संकलित नहीं करेगा)। – Mankarse
's' या' xxx' के नाम बदलना व्यवहार को नहीं बदलता है। यह लगभग निश्चित रूप से जीसीसी में एक बग है। ऐसा लगता है कि बग एक भिन्न टेम्पलेट के लिए खाली तर्क की आपूर्ति करके ट्रिगर किया जाता है। – Mankarse