Boost 包含了严重破坏——但这不是 Boost 的错

Boost includes wreaks havoc - but it's not Boost's fault

我正在将 Boost 引入到我的项目中,一旦我在特定文件中包含 Boost headers (#include <boost/property_tree/ptree.hpp>),我就会在 boost headers.[=14 中遇到错误=]

这里是一小段错误:

1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(28): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(28): error C2143: syntax error : missing ',' before 'sizeof'
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(26): error C3747: missing default template parameter : parameter 2
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(40): error C2974: 'boost::mpl::if_' : invalid template argument for 'T2', type expected
1>          c:\boost\include\boost-1_57\boost\mpl\if.hpp(56) : see declaration of 'boost::mpl::if_'
1>          c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(44) : see reference to class template instantiation 'boost::mpl::eval_if<C,__formal>' being compiled
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(40): error C2974: 'boost::mpl::if_' : invalid template argument for 'T3', type expected
1>          c:\boost\include\boost-1_57\boost\mpl\if.hpp(56) : see declaration of 'boost::mpl::if_'
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(50): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(50): error C2143: syntax error : missing ',' before 'sizeof'
1>c:\boost\include\boost-1_57\boost\mpl\eval_if.hpp(62): error C2974: 'boost::mpl::if_c' : invalid template argument for 'T1', type expected

我立即想到命名空间冲突,我删除了所有 using namespace std,但这并没有解决问题。我在另一个位置使用了 Boost 线程,它按预期工作(但该代码现在处于非活动状态且未构建)。

有什么提示吗?

--- 一些笔记

  1. 运行 VS2013

  2. 没有 using namespace std 的代码可以构建和工作

我唯一能想到的是,在提升 header 之前包含的一个 header 文件中存在错误。我已经看到它看起来像错误在后面包含的 header 中。您可以做的一件事来帮助找到问题是首先包括所有系统和提升 headers,然后包括您自己的 headers。