微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c:Boost 1.48型特征和Cocoa包含怪异

我刚刚将升级到1.48.0版本,我正在OSX Lion上开发的项目,其中还包括可可标题.这样做后,我收到一些错误,指向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:
error: expected expression [1]

尝试后,由于我无法真正了解这些错误,我注意到,如果我从

#import <Cocoa/Cocoa.h>
#include <boost/type_traits.hpp>

#include <boost/type_traits.hpp>
#import <Cocoa/Cocoa.h>

事情神奇地工作.我很困惑,因为它与以前的升级版本一样很好,我不知道为什么会发生这种情况.关于可能发生什么的任何想法?

谢谢!

解决方法

我本质上有同样的问题,并且从ildjam的线索,我找到了原因和解决.

(可怕)宏名称是检查,在AssertMacros.h中定义.根据该文件中的意见,未来苹果将删除名称.现在,苹果公司已经添加一个解决方法,以便在处理AssertMacros.h之前,将旧名称定义为__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERscoreS为0.例如

#define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERscoreS 0
#import <Cocoa/Cocoa.h>

如果您使用前缀文件,那么可以将定义放在那里.或者,直接解决方法是在包含type_traits.hpp之前进行undef检查.

#ifdef check
#undef check
#endif
#include "boost/type_traits.hpp"

(细节提交给Boost Trac:https://svn.boost.org/trac/boost/ticket/6219)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐