无法使用英特尔 C++ 编译器使用 boost::spirit 编译程序
Fail to compile program using boost::spirit with Intel C++ compiler
我正在尝试使用英特尔 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>
{};
,
我还是很好奇为什么会出问题?
最合理的猜测是 ICC 在 boost::fusion::vector_detail
中找到的 result_of
命名空间只是不符合规范的编译器的解决方法(例如,我认为GCC 4.6 也缺乏一些支持)因此,与 boost::fusion::result_of
的名称冲突仅在那里出现。
所以这是一个可向库开发人员报告的错误;命名空间应该更多地限定以适应旧的编译器。 (如果不支持所述编译器,它可能不再被修复)
我正在尝试使用英特尔 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>
{};
, 我还是很好奇为什么会出问题?
最合理的猜测是 ICC 在 boost::fusion::vector_detail
中找到的 result_of
命名空间只是不符合规范的编译器的解决方法(例如,我认为GCC 4.6 也缺乏一些支持)因此,与 boost::fusion::result_of
的名称冲突仅在那里出现。
所以这是一个可向库开发人员报告的错误;命名空间应该更多地限定以适应旧的编译器。 (如果不支持所述编译器,它可能不再被修复)