使用英特尔C ++编译器使用boost :: spirit编译程序失败

时间:2016-03-18 19:24:27

标签: c++ boost icc

我尝试使用英特尔C ++编译器编译以下示例http://www.boost.org/doc/libs/1_60_0/libs/spirit/example/qi/compiler_tutorial/calc3.cpp

编译失败,我得到300 kB的错误。前几个是:

boost/fusion/container/vector/vector.hpp(69): error: namespace "boost::fusion::vector_detail::result_of" has no member "value_at_c"
          : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type>
                                                                ^
boost/fusion/container/vector/vector.hpp(69): error: expected a ">"
          : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type>
                                                                          ^
boost/fusion/container/vector/vector.hpp(69): error: not a class or struct name
          : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type>
            ^

命令行是

icl.exe /I<path-to-boost> calc3.cpp

Boost版本:1.60,编译版本:15.0.6.285 Build 20151119

虽然我可以通过更改第69行来修复错误

struct is_convertible_to_first
        : boost::is_convertible<Sequence, typename result_of::value_at_c<This, 0>::type>
    {};

struct is_convertible_to_first
        : boost::is_convertible<Sequence, typename boost::fusion::result_of::value_at_c<This, 0>::type>
    {};

, 我还好奇为什么会出现问题?

1 个答案:

答案 0 :(得分:1)

最合理的猜测是,ICC在 result_of中找到的boost::fusion::vector_detail命名空间只是针对不合规编译器的一种解决方法(例如,我认为GCC 4.6缺乏一些支持那里也是如此,与boost::fusion::result_of的名称冲突只在那里出现。

所以这是一个可以通过库开发人员报告的错误;命名空间应该更合格以容纳旧的编译器。 (如果不支持所述编译器,它可能不再被修复)