निम्नलिखित कोड पर विचार करें:उर्फ टेम्पलेट, आंशिक विशेषज्ञता और अवैध पैरामीटर प्रकार शून्य
template<typename F>
struct S;
template<typename Ret, typename... Args>
struct S<Ret(Args...)> { };
template<typename... Args>
using Alias = S<void(Args...)>;
int main() {
S<void(int)> s;
Alias<int> alias;
}
यह ठीक है, काम करता अपेक्षा के अनुरूप है और दोनों S
और Alias
हुड एक ही प्रकार के तहत परिभाषित शामिल एक को शामिल लाइन S<void(int)>
।
अब, निम्न परिवर्तन पर विचार करें:
int main() {
S<void(void)> s; // this line compiles
Alias<void> alias; // this line does not
}
मैं, यह संकलन करने की उम्मीद कारण है कि लोगों का उल्लेख ऊपर से मिलते-जुलते।
In substitution of 'template using Alias = S [with Args = {void}]'
[...]
error: invalid parameter type 'void'
सवाल बहुत सरल है::
यह कह रही है कि यह Alias
को शामिल लाइन की वजह से संकलन नहीं है बिना चला जाता है, बजाय मैं त्रुटि मिलती है क्या मैं यहाँ याद किया?
कामकाज स्पष्ट है, लेकिन क्या यह उसी कारण से दोनों पंक्तियों को संकलित करने में विफल नहीं होना चाहिए? इसके अलावा 'एस 'एक कटौती की ओर जाता है जो कोशिश कर रहा है (अच्छी तरह से, सफल) * एक फ़ंक्शन प्रकार बनाएं जिसमें पैरामीटर के पास' शून्य '* है। क्या मै गलत हु? –
skypjack
@skypjack बस मुझे वह अनुभाग मिला जो मैं ढूंढ रहा था। 'शून्य' को गैर-निर्भर होना चाहिए। – Barry
संदर्भ के लिए धन्यवाद। वैसे भी, 'टेम्पलेट struct S {}; 'एक आश्रित प्रकार जो एक ही समस्या से पीड़ित होना चाहिए' में 'Args' भी नहीं है? –
skypjack