मुझे समझ में नहीं आ रहा है कि आप एक वर्ग को संकलित क्यों नहीं कर सकते हैं जिसमें एक सदस्य (डिफ़ॉल्ट रूप से रचनात्मक नहीं) दोनों के साथ एक ब्रेस-या-बराबर प्रारंभकर्ता और विरासत कन्स्ट्रक्टर है। जी ++ का कहना है:कन्स्ट्रक्टर और ब्रेस-या-बराबर प्रारंभकर्ताओं को विरासत
test.cpp:22:15: error: use of deleted function ‘Derived::Derived(float)’
Derived d(1.2f);test.cpp:16:13: note: ‘Derived::Derived(float)’ is implicitly deleted
because the default definition would be ill-formed:
using Base::Base;test.cpp:16:13: error: no matching function for call to ‘NoDefCTor::NoDefCTor()’
test.cpp:5:1: note: candidate:
NoDefCTor::NoDefCTor(int) NoDefCTor(int) {}
कोड है कि (छ ++ के तहत 5.1) को संकलित करने में विफल रहता है:
struct NoDefCTor
{
NoDefCTor(int) {}
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
कोड है कि संकलित, लेकिन कभी नहींNoDefCTor
के डिफ़ॉल्ट निर्माता का उपयोग करता है (जाहिरा तौर पर यह जरूरत के बावजूद!):
struct NoDefCTor
{
NoDefCTor(int) {}
NoDefCTor() = default;
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
मुझे वास्तव में एक डिफ़ॉल्ट कन्स्ट्रक्टर होने का विचार पसंद नहीं है जब मुझे किसी की आवश्यकता नहीं है। एक तरफ ध्यान दें कि दोनों संस्करण MSVC14 पर बस ठीक (और व्यवहार) संकलित करते हैं।
यह जीसीसी बग? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62310 – dyp
या यह gcc बग? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67054 – dyp
@dyp धन्यवाद। यह वास्तव में दूसरी बग है। मैंने सोचा कि यह एक भाषा की बात थी। – maxbc