以下代码在gcc 7.2下可以正常编译,但在clang 5.0下无法编译。请问有人知道问题出在哪里吗?
Translated text: "The following code compiles properly under gcc 7.2 but fails to compile under clang 5.0. Does anyone know what the problem is?"
#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
-stdlib=libc++
编译。 - chrisstd::get<0>(v)
,std::get<S1>(v)
等都会失败并抛出基本相同的错误(且中间实例化步骤更少)。 - aschepler