निम्नलिखित सी ++ प्रोग्राम सभी compilers में चेतावनी के बिना संकलित द्वारा प्रयोग किया जाता मैं कोशिश की है (जीसीसी 4.6.3, LLVM 3.0, आईसीसी 13.1.1, SolarisStudio 12.1/12.3):विभिन्न कास्टिंग ऑपरेटरों विभिन्न compilers
struct CClass
{
template<class T>
operator T() const { return 1; }
operator int() const { return 2; }
};
int main(void)
{
CClass x;
return static_cast<char>(x);
}
हालांकि, सोलारिसस्टूडियो कंपेलरों के बदले 2, सोलारिसस्टूडियो (या तो संस्करण) 1 लौटाता है, जिसे मैं सबसे तार्किक परिणाम मानता हूं।
जाहिर लौटने 1.
, इस पता लगाना के बाद से उपयोग करना return x.operator char();
परिणाम सभी compilers में, मैं बाद अंकन का उपयोग किया गया है। हालांकि, मैं जानना चाहता हूं कि कौन से कंपाइलर्स सही हैं और क्यों। (एक यह है कि बहुमत नियम लगता होगा, लेकिन यह अभी भी स्पष्ट नहीं होता क्यों।)
यह सवाल इसलिए सवाल here, here, और here से संबंधित प्रतीत हो रहा है, लेकिन इन "केवल" करने के लिए समाधान दे समस्याएं, कोई स्पष्टीकरण नहीं (कि मैं वैसे भी अपनी विशेष समस्या पर लागू करने में सक्षम था)।
ध्यान दें कि एक अतिरिक्त अधिभारित कास्टिंग ऑपरेटर जोड़ना, operator float() const { return 3; }
का परिणाम सॉलारिसस्टूडियो को अस्पष्टता के बारे में शिकायत करने के अलावा सभी कंपाइलरों में परिणाम देता है।
बस मेरे कंपाइलर, जी ++ 4.8.0 में परीक्षण किया गया, और यह 1 लौटाता है। – rodrigo
जी ++ 4.7.2 भी रिटर्न देता है 1. और ऑपरेटर फ्लोट() 'के साथ, किसी भी अस्पष्टता के बारे में कोई शिकायत नहीं है। – hvd
g ++ 4.7 से शुरू होता है http://gcc.godbolt.org/ – Riga