【发布时间】:2015-03-14 20:02:57
【问题描述】:
我收到以下错误消息:
/usr/include/boost/variant/detail/visitation_impl.hpp:207: typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor &, VPCV, mpl::true_, NBF, W *, S *) [W = mpl_::int_<20>, S = boost::detail::variant::visitation_impl_step<boost::mpl::l_iter<boost::mpl::l_end>, boost::mpl::l_iter<boost::mpl::l_end> >, Visitor = boost::detail::variant::copy_into, VPCV = const void *, NBF = boost::variant<TypeInfo, int, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>::has_fallback_type_]: Assertion `false' failed.
当我将std::vector<A> 作为参数按值传递给某个函数并且A 被定义为using A = boost::variant<B, int>; 时,就会发生这种情况。
简单来说,B 的定义如下:
class B
{
Data data;
std::vector< boost::variant<std::shared_ptr<C>, B> > vec;
};
B 是错误消息中的TypeInfo。
void func(std::vector<B> vec); //signature
auto result = func(that_vector_with_variants); //that line causes an error
我在这里https://svn.boost.org/trac/boost/ticket/5146发现了类似的错误
我的问题是:这是 boost 中的错误吗?我怎样才能使我的代码工作?
更新:
我认为我必须补充一点,如果我将 std::vector<boost::variant<std::shared_ptr<C>, B> > vec; 更改为 std::vector<boost::variant<C*, B> > vec;,那么一切正常。
【问题讨论】:
-
访客是什么?您没有显示任何相关代码。您正在使用变体。在一个容器中。好的。这基本上就是我们现在所知道的全部
-
@sehe,这是主要问题,它是一些内部访问者。当我在 gdb 中查看回溯时,我发现在复制向量时出现了错误。
标签: c++ boost boost-variant