[namespace.udecl]/18 द्वारा कहा गया है:विरासत में प्राप्त कंस्ट्रक्टर्स, डिफ़ॉल्ट निर्माता और दृश्यता
इस कारण से[...] एक का उपयोग कर-घोषणा कि नाम एक निर्माता एक पर्याय नहीं बनाता; इसके बजाए, अतिरिक्त कन्स्ट्रक्टर उपलब्ध हैं यदि वे संबंधित बेस क्लास के ऑब्जेक्ट को बनाने के लिए उपयोग किए जाने पर पहुंच योग्य होंगे, और उपयोग-घोषणा की पहुंच को अनदेखा किया जाएगा। [...]
, निम्नलिखित कोड संकलन नहीं करता है:
:class B { protected: B(int) { } }; class D: B { using B::B; }; int main() { D d{0}; }
यह एक त्रुटि कम या ज्यादा सभी प्रमुख compilers के साथ एक ही है कि रिटर्न
दूसरी ओर यहां
संरक्षित घोषित, निम्नलिखित कोड को संकलित करता है:
class B { protected: B() { } };
class D: B { using B::B; };
int main() { D d{}; }
क्या इसके बजाय पिछले उदाहरण में त्रुटि उत्पन्न करने के कारणों को संकलित करने में विफल नहीं होना चाहिए?
इसे संकलित करने की अनुमति क्या है?
संकेत: 'डी' में उपयोगकर्ता द्वारा घोषित कन्स्ट्रक्टर नहीं है। –
@ टी.सी. मैंने वही सोचा, लेकिन उपयोग-घोषणा की पहुंच को नजरअंदाज कर दिया गया है, इसलिए डिफ़ॉल्ट कन्स्ट्रक्टर को दूसरे मामले में विरासत में सुरक्षित और संरक्षित नहीं किया जाना चाहिए? – skypjack
ठीक है, एक और संकेत। क्लास में कोई उपयोगकर्ता द्वारा घोषित कन्स्ट्रक्टर नहीं है तो [class.ctor]/4 क्या होता है? और यह बेस क्लास कन्स्ट्रक्टर के साथ कैसे इंटरैक्ट करता है, [namepace.udecl]/15 दिया जाता है? –