以下の用途::訪問は適切GCC 7.2の下でコンパイルをコンパイルに失敗したが、打ち鳴らす5.0でコンパイルに失敗しました。誰が問題が何であるか知っていますか?のstd ::訪問が打ち鳴らすの下でのstdの5つの
#include <variant>
struct S1 {int foo() { return 0; }};
struct S2 {int foo() { return 1; }};
using V = std::variant<S1, S2>;
int bar() {
V v;
return std::visit([](auto& s) { return s.foo(); }, v);
}
最初のエラーは、この次のとおりです。ここで
include/c++/7.2.0/variant:238:46: error: cannot cast 'std::variant<S1, S2>' to its private base class
'std::__detail::__variant::_Variant_storage<true, S1, S2>'
return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
はgodboltへのリンクです。このエラーを示していますhttps://godbolt.org/g/5iaKUm
それにlibstdC++のバリアントはクランでサポートされていない非標準の機能を使用することも可能である可能性があります。 '-stdlib = libC++'でコンパイルします。 – chris
お知らせ 'のstd :: <0>(V)'、 'のstd ::は(V)'などは基本的に同じエラー(との間で少数のインスタンス化の段階)で失敗ゲット。 –
aschepler
はたぶんだまされやすい人は、あなたはだまされやすい人らしさを検討する方法に応じて:https://stackoverflow.com/q/46506387/2069064を – Barry