Aşağıdaki kod:varyantları clang altında başarısız için <string> almak ++ ancak g ++
variant<string> x = "abc";
cout << get<string>(x) << "\n";
g altında çalışıyor ++ (sürüm 7.2). Ancak, ne zaman (sürüm 5.0) libstdc kullanarak ++ ++ clang altında derlenmiş, ben get
yönteminde aşağıdaki hata olsun:
/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);
bu bir derleyici hata mı yoksa benim kod herhangi bir şekilde yasadışı?
Standart kütüphane uygulaması olarak 'libC++' kullanılmalı mıdır? IIRC, clang libstdC++'yi varsayılan olarak kullanır. – StoryTeller
Burada neyin yasadışı olduğunu göremiyorum, ancak, eğer öyleyse, bu çok basit bir şey berbat ... –
Gcc + libstdC++ içinde çalıştığı göz önüne alındığında, clang + libC++ içinde çalışır, ancak clang + başarısız olur libstdC++, büyük olasılıkla, clang ve libstdC++ arasında ince bir uyumsuzluk olmasıdır. Cevap, uyumsuzluğun tam olarak ne olduğuna işaret etmelidir. – hvd