【问题标题】:Boost.Spirit mini_xml2.cpp example could not be compiled by C++11, Boost 1.55Boost.Spirit mini_xml2.cpp 示例无法被 C++11、Boost 1.55 编译
【发布时间】:2014-01-10 08:53:06
【问题描述】:

c++0x 编译器无法编译 boost.spirit 示例 mini_xml2.cpp(并且没有来自非 c++0x 编译器的错误)

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

错误日志放在here。我怀疑这个问题与非终端属性有关(第 159-163 行),但我可能是错的。

  • c++版本(Ubuntu/Linaro 4.8.1-10ubuntu9)4.8.1
  • Boost 版本 1.55

我在 boost 跟踪器上创建了 issue,但没有答案。

有人有同样的错误吗?

已解决:我找到了解决方案here

// Add this macro
#define BOOST_SPIRIT_USE_PHOENIX_V3

【问题讨论】:

  • 不要学究气,那是g++版本,不是c++版本。 g++是一个 c++编译器,其中有很多。

标签: c++ boost c++11 boost-spirit


【解决方案1】:

如前所述,在现代编译器上,您实际上需要使用 Phoenix V3,因为 Phoenix V2 依赖于 old result-of 协议,而在较新版本的 boost 库中并不总是包含该协议没有了。

此外,在某些编译器(AFAIK 至少 clang)上,默认启用 BOOST_RESULT_OF_USE_DECLTYPE 方法,这可能会导致支持库省略(成本更高的)TR1 结果协议。

好消息是,在我们将signaled this on the user list作为反复出现的绊脚石之后,官方的决定来了:

Farewell Phoenix-2 2013 年 12 月 14 日;凌晨 3 点 38 分(乔尔·德·古兹曼)
(也 blog post

Boost C++... 十多年后,我终于将 Phoenix-2 从 Boost Spirit 代码库。我很难过。这就像告别一个好朋友。向前 到 Phoenix-3。

那只是 7 天前 :)

所以在(不久的)将来这个问题会得到解决。

【讨论】:

  • “所以在(不久的)将来这个问题将得到解决。”以及此标签中 3/4 的问题:)。
  • 好吧,3/4 可能有点过了,但是,引用我的邮件列表帖子:“我无法记录 PhoenixV3 用 Spirit 解决人们问题的次数. 它以压倒性的方式反复出现”。 (另外,你速度很快!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2017-03-26
相关资源
最近更新 更多