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 ++ без успеха.

Что не так с примером?

Ответы на вопрос(1)

Ваш ответ на вопрос