。しかし、のlibstdC++を使用して(バージョン5.0)++打ち鳴らすの下でコンパイルしたとき、私はget
方法で、次のエラーが表示されます。次のコードをバリアントの<string>が打ち鳴らすの下で失敗し得る++ではなく、G ++
/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++'を標準ライブラリの実装として使用するように指定しましたか? IIRCでは、clangはデフォルトでlibstdC++を使用します。 – StoryTeller
私はここで何が違法であるかはわかりませんが、もしそうなら、これはかなり基本的なことです。 –
gcc + libstdC++で動作すると、clang + libC++で動作しますが、clang + libstdC++の場合は、clangとlibstdC++の微妙な互換性がない可能性が最も高いケースです。答えは、非互換性が何であるかを正確に指摘しなければならない。 – hvd