निम्नलिखित कोड:<string> मिल वेरिएंट के लिए बजना तहत असफल ++ लेकिन नहीं जी ++
variant<string> x = "abc";
cout << get<string>(x) << "\n";
जी के तहत ठीक काम करता है ++ (संस्करण 7.2)। हालांकि, जब बजना तहत ++ (संस्करण 5.0) libstdc का उपयोग कर ++ संकलित, मैं करने के get
विधि में निम्न त्रुटि:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.2.0/../../../../include/c++/7.2.0/variant:238:46: fatal error: cannot cast 'std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >' to its private base class 'std::__detail::__variant::_Variant_storage<false, std::
__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >'
return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
यह एक संकलक बग है, या मेरे कोड किसी भी तरह से गैर कानूनी है?
क्या आपने निर्दिष्ट किया है कि 'libC++' मानक लाइब्रेरी कार्यान्वयन के रूप में उपयोग किया जाना चाहिए? आईआईआरसी, क्लैंग डिफ़ॉल्ट रूप से libstdC++ का उपयोग करता है। – StoryTeller
मैं यह नहीं देख सकता कि यहां क्या अवैध है, लेकिन, यदि ऐसा है, तो यह गड़बड़ करने के लिए एक बहुत ही बुनियादी बात होगी ... –
यह देखते हुए कि यह gcc + libstdC++ में काम करता है, clang + libC++ में काम करता है, लेकिन क्लैंग + libstdC++, सबसे संभावित मामला यह है कि यह clang और libstdC++ के बीच एक सूक्ष्म असंगतता है। एक जवाब को इंगित करना चाहिए कि वास्तव में असंगतता क्या है। – hvd