Die folgenden Verwendungen von std :: besuchen Kompilierungen ordnungsgemäß unter gcc 7.2 aber nicht unter clang 5.0 kompilieren. Weiß jemand, was das Problem ist?std :: visit für variante nicht kompilieren unter clang 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);
}
Der erste Fehler ist dies:
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);
Hier ist ein Link zu Godbolt zeigt dieser Fehler: https://godbolt.org/g/5iaKUm
Es könnte möglich sein, dass die Variante von libstdC++ eine Nicht-Standard-Funktion verwendet, die Clang nicht unterstützt. Es kompiliert mit '-stdlib = libC++'. – chris
Hinweis 'std :: get <0> (v)', 'std :: get (v)', etc. scheitern mit im Wesentlichen den gleichen Fehler (und weniger Instanziierung Schritte dazwischen). –
aschepler
Vielleicht ein Betrogener, abhängig davon, wie Sie betrogen denken: https://Stackoverflow.com/q/46506387/2069064 – Barry