C++ BOOST'中的错误消息;s在OSX 10.9 Xcode6上具有_binary_operator.hpp
因此,我使用以下方便发布的内容构建了boost 它可以编译,我可以将Xcode6中的各个框架添加到我的iOS目标和OSX目标中 它在iOS上正常运行,但当我尝试在OSX上编译时,在has_binary_operator.hpp中出现以下行中的错误:C++ BOOST'中的错误消息;s在OSX 10.9 Xcode6上具有_binary_operator.hpp,c++,macos,boost,C++,Macos,Boost,因此,我使用以下方便发布的内容构建了boost 它可以编译,我可以将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_ope
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)));
};
模板
结构运算符_存在{
static::boost::type_traits::yes_type check(has_运算符);//当运算符存在时,首选此版本
static::boost::type_traits::no_type check(no_操作符);//此版本用于其他情况
BOOST_STATIC_常量(bool,value=(sizeof(check)((make()BOOST_TT_TRAIT_OP make()),make())==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:应为成员名或“;”后声明说明符
截图:
注:我的stdlib是libc++的,我想在iOS和MacOSX中使用C++11和Clang。我的意思是,它在iOS上运行得非常好,那么为什么它不能在MacOSX目标上运行呢
快速修复:
取消定义“check”似乎可以解决此错误,因为这似乎是MacOSX上保留的关键字。不过,仅仅取消定义OSX关键字似乎是一个奇怪的解决方案,这不会在以后引起问题吗
#undef check
#include <boost/multi_array.hpp>
#未定义检查
#包括
check
不是一个关键字,而是苹果提供的文件中一个不幸命名的宏
这是boost(和其他图书馆供应商)多年来一直存在的问题
头文件,用于查看此文件的某些历史记录
此文件的最新版本(Apple随10.9 SDK提供)包含以下文本:
- 在Mac OS X 10.6之前,此文件中使用的宏名称与某些
- 用户代码,包括Boost中的库和C++标准的建议工作,
- 这个头的客户端无法解决这个冲突。因为
- 其中,大多数宏都已更改,因此它们的前缀为
- __并至少包含一个大写字母,这将缓解当前的压力
- 以及未来的冲突。然而,为了让现有资源继续编译
- 兼容性宏在末尾用旧名称定义。托普斯的剧本
- 在此文件末尾,将转换目录中使用的所有旧宏名称
- 给新名字打电话。建议客户端根据需要迁移到这些新宏
- 他们更新了源代码,因为MacOSX的未来版本将删除
- 旧的宏定义(不带双下划线前缀)。客户
- 要编译没有旧宏定义的宏,可以定义宏
- __在创建此文件之前,将不带下划线的断言\u宏\u定义\u版本\u设置为0
- 包括在内
因此,您可以在构建命令中添加-D\u断言\u宏\u定义\u版本\u而不使用\u下划线=0
,以解决此问题
或者,您也可以获得更新版本的boost,其中这些调用已从check
重命名为s\u checkcheck
不是一个关键字,而是苹果提供的文件中一个不幸命名的宏
这是boost(和其他图书馆供应商)多年来一直存在的问题
头文件,用于查看此文件的某些历史记录
此文件的最新版本(Apple随10.9 SDK提供)包含以下文本:
- 在Mac OS X 10.6之前,此文件中使用的宏名称与某些
- 用户代码,包括Boost中的库和C++标准的建议工作,
- 这个头的客户端无法解决这个冲突。因为
- 其中,大多数宏都已更改,因此它们的前缀为
- __并至少包含一个大写字母,这将缓解当前的压力
- 以及未来的冲突。然而,为了让现有资源继续编译
- 兼容性宏在末尾用旧名称定义。托普斯的剧本
- 在此文件末尾,将转换目录中使用的所有旧宏名称
- 给新名字打电话。建议客户端根据需要迁移到这些新宏
- 他们更新了源代码,因为MacOSX的未来版本将删除
- 旧的宏定义(不带双下划线前缀)。客户
- 要编译没有旧宏定义的宏,可以定义宏
- __在创建此文件之前,将不带下划线的断言\u宏\u定义\u版本\u设置为0
- 包括在内
因此,您可以在构建命令中添加-D\u断言\u宏\u定义\u版本\u而不使用\u下划线=0
,以解决此问题
或者,您也可以获得更新版本的boost,其中这些调用已从check
重命名为s\u checkcheck
不是一个关键字,而是苹果提供的文件中一个不幸命名的宏
这是boost(和其他图书馆供应商)多年来一直存在的问题
头文件,用于查看此文件的某些历史记录
此文件的最新版本(Apple随10.9 SDK提供)包含以下文本:
- 在Mac OS X 10.6之前,此文件中使用的宏名称与某些
- 用户代码,包括Boost中的库和C++标准的建议工作,
- 这个头的客户端无法解决这个冲突。因为
- 其中,大多数宏都已更改,因此它们的前缀为
- __并至少包含一个大写字母,这将缓解当前的压力
- a