У меня есть следующее сообщение об ошибке:
/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;
то все работает.