Các mã sau đây:được <string> cho các biến thể thất bại dưới kêu vang ++ nhưng không g ++
variant<string> x = "abc";
cout << get<string>(x) << "\n";
hoạt động tốt dưới g ++ (phiên bản 7.2). Tuy nhiên, khi biên soạn dưới kêu vang ++ (phiên bản 5.0) sử dụng libstdC++, tôi nhận được lỗi sau trong phương pháp 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);
Đây có phải là một lỗi biên dịch, hoặc là mã của tôi là bất hợp pháp bằng cách nào?
Bạn có chỉ định rằng 'libC++' nên được sử dụng làm thư viện chuẩn không? IIRC, clang sử dụng libstdC++ theo mặc định. – StoryTeller
Tôi không thể thấy những gì là bất hợp pháp ở đây, nhưng, nếu vậy, điều này sẽ là một điều khá cơ bản để mess up ... –
Cho rằng nó hoạt động trong gcc + libstdC++, hoạt động trong clang + libC++, nhưng thất bại trong clang + libstdC++, trường hợp có khả năng nhất là nó là một sự không tương thích tinh tế giữa clang và libstdC++. Một câu trả lời nên chỉ ra chính xác những gì không tương thích là mặc dù. – hvd