इस कोड स्निपेट पर विचार करें:अजीब अप्रारंभीकृत स्थिरांक सदस्य व्यवहार
struct Foo {
};
template<typename T>
struct Bar {
const T foo;
};
int main() {
Bar<Foo> test;
}
मैं जी के साथ यह संकलन कर रहा हूँ ++ - 4.9.2 के साथ [-std = C++ 11 -O0 -g3 -pedantic -Wall -Wextra -Wconversion] और error: uninitialized const member in ‘struct Bar<Foo>’
हो रही है। यह बहुत स्पष्ट है।
लेकिन केवल std :: स्ट्रिंग को Foo सदस्य और प्रोग्राम संकलन के रूप में जोड़ने का प्रयास करें!
#include <string>
struct Foo {
std::string test;
};
// (...)
क्या हो रहा है? फिर से संकलित करने में विफल होने के लिए परीक्षण के प्रकार को डबल कारण प्रोग्राम में बदलना। वर्ग में कौन सी स्ट्रिंग सदस्य बदलता है?
Link to online compiler with this snippet.
ऐसा लगता है कि जीसीसी संस्करण 4.6 के बाद से इस तरह व्यवहार करता है।
एक जीसीसी बग बजना होने के लिए लगता है शेयर नहीं करता है: http: //coliru.stacked-crooked। com/a/508312aef603cc15 – Deduplicator
प्रारंभिकता हालांकि यह कुछ याद आ रही चेतावनी है लेकिन [-O0 -g3 -pedantic -Wall -Wextra -Wconversion] जोड़ना कोई और कंपाइलर संदेश नहीं देता है। – omikron
एमएसवीसी समस्या को प्रदर्शित नहीं करता है और डिफ़ॉल्ट कन्स्ट्रक्टर की कमी के लिए संकलन करने से इंकार कर देता है। –