c++ boost c++11 boost-spirit

El ejemplo de Boost.Spirit mini_xml2.cpp no ​​pudo ser compilado por C++ 11, Boost 1.55



c++11 boost-spirit (1)

El compilador c ++ 0x no compila el ejemplo de boost.spirit mini_xml2.cpp (y ningún error del compilador no c ++ 0x)

$> c++ -std=c++0x mini_xml2.cpp (errors) $> c++ mini_xml2.cpp (no errors)

El registro de error se coloca aquí . Sospecho que el problema está relacionado con atributos no terminales (líneas 159-163), pero podría estar equivocado.

  • Versión c ++ (Ubuntu / Linaro 4.8.1-10ubuntu9) 4.8.1
  • Versión Boost 1.55

He creado un problema en el rastreador de refuerzo, pero no tengo respuesta.

¿Alguien tiene los mismos errores?

Resuelto : Encontré una solución aquí .

// Add this macro #define BOOST_SPIRIT_USE_PHOENIX_V3


Como se indicó, en los compiladores modernos, en realidad necesitará utilizar Phoenix V3, ya que Phoenix V2 se basa en el antiguo resultado del protocolo, que en las versiones más recientes de las bibliotecas de impulso ya no siempre se incluye.

Además, en algunos compiladores (AFAIK al menos clang) el enfoque BOOST_RESULT_OF_USE_DECLTYPE está habilitado de forma predeterminada, lo que puede hacer que las bibliotecas de soporte omitan el (más costoso) TR1 resultado del protocolo.

La buena noticia es que, después de señalar esto en la lista de usuarios como un obstáculo recurrente, la decisión oficial está aquí:

Adiós Phoenix-2 14 de diciembre de 2013; 3:38 a.m. (Joel de Guzman)
(también blog post )

Boost C ++ ... Después de más de una década, finalmente retiré Phoenix-2 de la base de código Boost Spirit. Me siento triste. Es como un adiós a un buen amigo. Adelante a Phoenix-3.

Eso es solo hace 7 días :)

Entonces, en el (futuro) cercano, este problema se habrá resuelto.