boost :: spirit :: hold_any corrupción de memoria

Tengo una base de código grande que puede usarboost :: any oimpulso :: espíritu :: hold_any (dependiendo de una definición macro).

hold_any parece ser compatible conboost::any (p.ej.¿Cómo imprimir boost :: any a una secuencia? oTipo de borrado - Parte IV) y más rápido (Por qué no deberías usar boost :: any) pero estoy experimentando varios errores de segmentación usandohold_any (Boost v1.55 / 1.54 / 1.53).

Este es un ejemplo de trabajo mínimo que exhibe el mismo problema que el código original:

#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;
}

El programa parece funcionar correctamente:

cambiando deboost::spirit::hold_any aboost::any;cambiando el contenido de lahold_any a un tipo de datos lo suficientemente pequeño como para realizar una pequeña optimización del búfer (por ejemplo, destd::string aint)

Parece extraño que pueda haber algún error importante en una biblioteca ampliamente utilizada como Boost Spirit, pero

Me está costando encontrar un error en el ejemplo;He intentado g ++ / clang ++ sin éxito.

¿Qué tiene de malo el ejemplo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta