【发布时间】:2011-12-06 06:37:35
【问题描述】:
我刚刚在我正在 OSX Lion 上开发的项目中将 boost 更新到 1.48.0 版本,该项目还包括 Cocoa 标头。这样做之后,我得到了一大堆错误,它们都指向 has_prefix_operator.hpp 和 has_binary_operator.hpp,它们都指向如下行:
BOOST_STATIC_CONSTANT(bool, value = (sizeof(check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
../../boost_1_48_0/boost/type_traits/detail/has_binary_operator.hpp:157:4: 错误:预期的表达式 [1]
在尝试之后,由于我无法真正解读这些错误的任何意义,我注意到如果我将包含顺序从以下位置切换:
#import <Cocoa/Cocoa.h>
#include <boost/type_traits.hpp>
到
#include <boost/type_traits.hpp>
#import <Cocoa/Cocoa.h>
事情神奇地起作用。我对此感到非常困惑,因为它与之前的 boost 版本配合得很好,我不知道为什么会这样。对可能发生的事情有任何想法吗?
谢谢!
【问题讨论】:
-
看来
Cocoa.h直接或间接定义了一个与Boost 代码中使用的标识符之一同名的宏。 -
嗯,是的,很可能是这样。- 看起来很奇怪,因为所有的 boost 宏都以 BOOST_ 开头,因此相当独特。太棒了!
-
我不是说
Cocoa.h是定义一个以BOOST_开头的宏;我的意思是说Cocoa.h正在定义一个名为Lhs或Rhs或has_operator或其他一些可怕的宏名称的宏,并且它与Boost 代码中使用的正确标识符冲突。 -
感谢您的澄清。-希望在下一个版本中修复,因为这有点令人烦恼。
-
标头与 Qt 结合会导致类似的错误。因此,您可能想在错误跟踪器中查找相关内容。