【发布时间】:2018-03-12 09:29:42
【问题描述】:
以下代码:
variant<string> x = "abc";
cout << get<string>(x) << "\n";
在 g++(7.2 版)下工作正常。但是,在 clang++(5.0 版)下使用 libstdc++ 编译时,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);
这是编译器错误,还是我的代码以任何方式非法?
【问题讨论】:
-
您是否指定
libc++应该用作标准库实现? IIRC,clang 默认使用 libstdc++。 -
我看不出这里有什么非法的,但是,如果是这样,这将是一件非常基本的事情......
-
鉴于它在 gcc+libstdc++ 中工作,在 clang+libc++ 中工作,但在 clang+libstdc++ 中失败,最有可能的情况是它在 clang 和 libstdc++ 之间存在细微的不兼容。答案应该准确指出不兼容的原因。
-
嘿。今天遇到了同样的问题。