У меня есть следующее сообщение об ошибке:Возможная ошибка в повышающем посещении
/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
Мой вопрос: Является ли это ошибка в импульс? Как я могу заставить свой код работать?
Update:
Я думаю, что я должен добавить, что если я изменю std::vector<boost::variant<std::shared_ptr<C>, B> > vec;
в std::vector<boost::variant<C*, B> > vec;
то все работает.
Что посетитель? Вы не показываете связанный код. Вы используете вариант. В контейнере. Хорошо. Это в основном все, что мы знаем сейчас – sehe
@sehe, Это основная проблема, что это какой-то внутренний посетитель. Когда я смотрю backtrace в gdb, я вижу, что ошибка появилась во время копирования вектора. – justanothercoder