क्या मैं 5.2.8.3: ... If the type of the expression is a class type, the class shall be completely-defined.
में मानक को सही ढंग से पढ़ रहा हूं यदि प्रकार "पूरी तरह से परिभाषित नहीं" है तो इसका मतलब है कि निम्न प्रोग्राम अपरिभाषित है?एक आगे घोषित प्रकार अपरिभाषित व्यवहार पर टाइपिड का उपयोग कर रहा है?
foo.cpp:
struct foo
{
virtual void a(){}
};
struct bar : foo
{
virtual void a(){}
};
bar abar;
foo& get_some_foo()
{
return abar;
}
main.cpp:
#include <iostream>
#include <typeinfo>
struct foo;
foo& get_some_foo();
int main()
{
foo& a_ref_foo(get_some_foo());
std::cout << "a_ref_foo typeid name: " << typeid(a_ref_foo).name() << std::endl;
return 0;
}
MSVC10 आउटपुट: `a_ref_foo typeid नाम: struct foo '
इस मामले में, "इच्छा" का उपयोग यह बीमार है, क्योंकि यह एक निदान योग्य नियम है (यानी, यह नहीं कहा जाता है कि "कोई निदान आवश्यक नहीं है" और स्पष्ट रूप से अपरिभाषित व्यवहार के रूप में वर्णित नहीं है)। –
@ आर। मार्टिन्होफर्नैंड्स: धन्यवाद, मैंने जवाब अपडेट किया है। (सी मानक, जिसके साथ मैं अधिक परिचित हूं, अलग-अलग "होगा" का उपयोग करता है; एक "इच्छा" का उल्लंघन जो एक स्पष्ट * बाधा में नहीं है * प्रोग्राम के व्यवहार को अपरिभाषित करता है। सी ++ नियम धारा 1.4 में शामिल होते हैं, " कार्यान्वयन अनुपालन "।) –
आपकी धारणा के बारे में आपकी धारणा सही थी। उसके लिए माफ़ करना। मैंने अभी भी जीसीसी पर कोशिश की और वही त्रुटियां मिलीं। डब्ल्यू 4 के साथ इसका दिलचस्प एमएसवीसी 10 चेतावनी भी नहीं देता है। – Zac