boost :: spirit :: hold_any повреждение памяти
У меня есть большая база кода, которая может использоватьповышение :: любой или жеповышение :: дух :: hold_any (в зависимости от определения макроса).
hold_any
кажется совместимым сboost::any
(например.Как распечатать boost :: any в поток? или жеТип стирания - часть IV) и быстрее (Почему вы не должны использовать boost :: any) но я испытываю несколько ошибок ошибки сегментации, используяhold_any
(Boost v1.55 / 1.54 / 1.53).
Это минимальный рабочий пример, который демонстрирует ту же проблему, что и исходный код:
#include <iostream>
#include <string>
#include <vector>
#include <boost/spirit/home/support/detail/hold_any.hpp>
typedef boost::spirit::hold_any any;
typedef std::vector<any> vany;
int main()
{
vany data0, data1;
for (unsigned i(0); i < 1000; ++i)
{
std::string s("test_test_test");
data0.push_back(any(s));
}
const unsigned n(data0.size());
vany::iterator iter(data0.begin());
for (unsigned i(0); i < n; ++i)
{
std::cout << "Moving " << i << std::endl;
data1.push_back(*iter);
iter = data0.erase(iter);
}
return 0;
}
Программа, кажется, работает правильно:
меняется отboost::spirit::hold_any
вboost::any
;изменяя содержаниеhold_any
к типу данных, достаточно малому для выполнения небольшой оптимизации буфера (например, изstd::string
вint
).Кажется странным, что в широко используемой библиотеке, такой как Boost Spirit, может быть какая-то серьезная ошибка, но
Мне трудно найти ошибку в примере;Я пробовал g ++ / clang ++ без успеха.Что не так с примером?