gpt4 book ai didi

c++ - OSX 10.9 Xcode6 上 BOOST 的 has_binary_operator.hpp 中的错误消息

转载 作者:行者123 更新时间:2023-11-28 00:23:32 31 4
gpt4 key购买 nike

因此,我使用以下 script 构建了 boost由 toma 方便地发布

它会编译,我可以将 Xcode6 中的相应框架添加到我的 iOS 目标和我的 OSX 目标。

它在 iOS 上运行正常,但当我尝试在 OSX 上编译时,我在 has_binary_operator.hpp 中出现以下几行错误:

template < typename Lhs, typename Rhs >
struct operator_exists {
static ::boost::type_traits::yes_type check(has_operator); // this version is preferred when operator exists
static ::boost::type_traits::no_type check(no_operator); // this version is used otherwise

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.framework/Headers/type_traits/detail/has_binary_operator.hpp:155:42:预期的成员名称或“;”声明说明符之后.../boost.framework/Headers/type_traits/detail/has_binary_operator.hpp:156:41: 预期的成员名称或';'在声明说明符之后

截图: Screenshot

PS:我的标准库是 libc++,我想在 iOS 和 MacOSX 中使用 C++11 和 Clang。我的意思是它非常适用于 iOS,那么为什么它不适用于 MacOSX 目标?!?

快速修复:取消定义“检查”似乎可以解决错误,因为这似乎是 MacOSX 上保留的关键字。仅取消定义 OSX 关键字似乎仍然是一个奇怪的解决方案,这不会导致以后出现问题吗?

#undef check
#include <boost/multi_array.hpp>

最佳答案

check不是关键字,而是 Apple 提供的文件中不幸命名的宏。

多年来,这一直是 boost(和其他库供应商)一直面临的问题。

头文件<AssertMacros.h>是定义这个宏的地方。

参见 https://svn.boost.org/trac/boost/ticket/2115有关这方面的一些历史。

此文件的最新版本(Apple 随 10.9 SDK 提供)包含以下文本:

  • 在 Mac OS X 10.6 之前,此文件中使用的宏名称与某些名称冲突
  • 用户代码,包括 boost 中的库和拟议的 C++ 标准工作,
  • 并且此 header 的客户端无法解决此冲突。因为
  • 其中,大部分宏都已更改,因此它们以
  • 为前缀
  • __ 并且包含至少一个大写字母,这应该减轻当前
  • 和 future 的冲突。但是,为了让当前源代码继续编译,
  • 兼容性宏在末尾用旧名称定义。一个顶级脚本
  • 在此文件的末尾将转换目录中使用的所有旧宏名称
  • 新名称。建议客户迁移到这些新宏,因为
  • 他们更新了源代码,因为 Mac OS X 的 future 版本将删除
  • 旧的宏定义(没有双下划线前缀)。客户
  • 想编译不用旧的宏定义可以自己定义宏
  • 在此文件之前__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES为0
  • 包括在内。

因此,您可以添加 -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0到你的构建命令来解决这个问题。

或者,您可以获得更新版本的 boost,其中那些调用已从 check 重命名。至 s_check .

关于c++ - OSX 10.9 Xcode6 上 BOOST 的 has_binary_operator.hpp 中的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26234560/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com