कार्यक्रम निम्नलिखित पर विचार करें:कास्ट ऑपरेटर फ़ंक्शन g ++ में ठीक संकलित करता है लेकिन अन्य कंपाइलरों में नहीं। क्यूं कर?
struct S {
using T = float;
operator T() { return 9.9f; }
};
int main() {
S m;
S::T t = m;
t = m.operator T(); // Is this correct ?
}
कार्यक्रम ग्राम में ठीक संकलित ++ (लाइव डेमो here देखें)
लेकिन यह बजना में ++ संकलन में विफल रहता है, MSVC++ & इंटेल C++ कम्पाइलर
बजना ++ निम्न त्रुटियों देता है (लाइव डेमो देखें here)
main.cpp:8:20: error: unknown type name 'T'; did you mean 'S::T'?
t = m.operator T(); // Is this correct ?
^
S::T
main.cpp:2:11: note: 'S::T' declared here
using T = float;
MSVC++ त्रुटियों (लाइव डेमो here देखें) निम्नलिखित देता
source_file.cpp(8): error C2833: 'operator T' is not a recognized operator or type
source_file.cpp(8): error C2059: syntax error: 'newline'
इंटेल सी ++ संकलक भी इस कोड (देखें लाइव डेमो here)
तो, सवाल जो संकलक यहीं है है को खारिज कर दिया? क्या G ++ यहां गलत है या अन्य 3 कंपाइलर्स गलत हैं? इस बारे में सी ++ मानक क्या कहता है?
वाह, बहुत अच्छा सवाल! – Columbo