现在的位置: 首页 > 综合 > 正文

boost编译开关宏参考手册(中文)

2013年08月12日 ⁄ 综合 ⁄ 共 5221字 ⁄ 字号 评论关闭

http://boost.ez2learn.com/libs/config/doc/html/boost_config/boost_macro_reference.html

以下宏都是用於描述C++标准所要求的某个特性的,如果下面当中的某一个宏被定义,则表示该编译器存在一个与标准不符的缺陷。

说明

BOOST_BCB_PARTIAL_SPECIALIZATION_BUG

编译器

编译器存在某些偏特化方面的缺陷 - 很可能是 Borland C++ Builder.

BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL

编译器

如果在当前域中有对被查找符号的 using 声明,则ADL查找失败。例如,using boost::get_pointer; 将阻止使用 ADL 在 boost 内部的名字空间中(但是可以在其它地方)查找 get_pointer 的重载。可能是
Borland 的特殊方式。

BOOST_NO_ADL_BARRIER

编译器

编译器定位并查找那些在执行参数相关查找时实际上不应查找的名字空间。

BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP

编译器

编译器没有实现ADL(又称Koenig查找); 请见 std::3.4.2 [basic.koenig.lookup]

BOOST_NO_AUTO_PTR

标准库

如果编译器/标准库提供非标准或有问题的  std::auto_ptr.

BOOST_NO_CTYPE_FUNCTIONS

平台

平台不提供字符分类操作的函数 <ctype.h> 和 <cctype>,
只提供了相应的宏。

BOOST_NO_CV_SPECIALIZATIONS

编译器

如果针对cv-限定类型的模板特化与针对非cv-限定类型的特化冲突。

BOOST_NO_CV_VOID_SPECIALIZATIONS

编译器

如果针对cv-void类型的模板特化与针对void的特化冲突。

BOOST_NO_CWCHAR

平台

平台不提供 <wchar.h> 和 <cwchar>.

BOOST_NO_CWCTYPE

平台

平台不提供 <wctype.h> 和 <cwctype>.

BOOST_NO_DEPENDENT_NESTED_DERIVATIONS

编译器

编译器不能编译带有受限基类的嵌套类: 

template<typename T>
struct foo : {
template<typename U>
struct bar : public U {};

};

BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS

编译器

模板值参数不能为受限类型,例如: 

template<class T, typename T::type value> 
class X { ... };

BOOST_NO_EXCEPTION_STD_NAMESPACE

标准库

标准库未将 <exception> 的一些或全部内容置於名字空间
std 中。

BOOST_NO_EXCEPTIONS

编译器

编译器不支持异常处理(多数嵌入式平台的C++编译器都要求这一设置)。注意,并不要求 boost 库一定要遵守这一配置设置 - 在某些情形下这样做是不可能的。遵守这一设置的库通常在发生严重错误时会退出 - 已经警告你了!

BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS

编译器

在调用函数模板实例时只能使用被推导的模板参数。

BOOST_NO_FUNCTION_TEMPLATE_ORDERING

编译器

编译器不执行函数模板分类(function template ordering)或执行的方法不正确。 

// #1
template<class T> void f(T);
// #2
template<class T,class U> void f(T(*)(U));
void bar(int);
f(&bar); // 应选择 #2.

BOOST_NO_INCLASS_MEMBER_INITIALIZATION

编译器

编译器违犯 std::9.4.2/4.

BOOST_NO_INTRINSIC_WCHAR_T

编译器

C++实现不提供 wchar_t, 或者它只是另一个整型类型的别名。使用这一符号来决定在已经有一个针对该整型类型的特化时是否适合再定义针对 wchar_t 的特化。

BOOST_NO_IOSFWD

标准库

标准库缺少 <iosfwd>.

BOOST_NO_IOSTREAM

标准库

标准库缺少 <iostream><istream> 或 <ostream>.

BOOST_NO_IS_ABSTRACT

编译器

C++编译器不支持抽像类型的 SFINAE, 见 Core Language DR337, 不过它当前还未加入标准。幸好多数编译器支持 SFINAE 也支持这份 DR.

BOOST_NO_LIMITS

标准库

C++实现不提供 <limits> 头文件。在库代码中从不检查该符号;它总是包含 <boost/limits.hpp>,
以保证提供 std::numeric_limits

BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS

标准库

在编译期,像 numeric_limits<T>::is_signed 这样的常量不可用。

BOOST_NO_LONG_LONG_NUMERIC_LIMITS

标准库

没有 numeric_limits<long long> 和 numeric_limits<unsigned long long> 的特化。仅当编译器支持 long long 类型时,<boost/limits.hpp> 会
将这两个特化作为标准库的"修正"。

BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS

编译器

编译器不支持模板类的单独成员函数特化。

BOOST_NO_MEMBER_TEMPLATE_KEYWORD

编译器

如果编译器支持成员模板,但是在访问成员模板类时不使用 template 关键字。

BOOST_NO_MEMBER_TEMPLATE_FRIENDS

编译器

不支持C++标准 14.5.3 所描述的成员模板友元语法 (template<class P> friend class frd;)

BOOST_NO_MEMBER_TEMPLATES

编译器

不完全支持成员模板函数。

BOOST_NO_MS_INT64_NUMERIC_LIMITS

标准库

没有 numeric_limits<__int64> 和 numeric_limits<unsigned __int64> 的特化。仅当编译器支持 __int64 类型时,<boost/limits.hpp> 会
将这两个特化作为标准库的"修正"。

BOOST_NO_OPERATORS_IN_NAMESPACE

编译器

编译器要求继承的操作符友元函数在名字空间域中定义,然后 using 给 boost. 可能是 GCC 的特殊方式。相关例子请见 <boost/operators.hpp>

BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS

编译器

编译器不能正确处理那些依赖於主模板中的缺省参数的偏特化。

BOOST_NO_POINTER_TO_MEMBER_CONST

编译器

编译器不能正确处理常量成员函数的指针,要防止在重载函数模板时使用它们。相关例子请见 <boost/functional.hpp>

BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS

编译器

成员指针不能作为模板参数使用。

BOOST_NO_PRIVATE_IN_AGGREGATE

编译器

编译器误读了 8.5.1, 将含私有或保护的成员函数的类视为 non-aggregate.

BOOST_NO_SFINAE

编译器

编译器不支持 "Substitution Failure Is Not An Error" 的元编程惯用法。

BOOST_NO_STD_ALLOCATOR

标准库

C++标准库没有提供符合标准的 std::allocator.

BOOST_NO_STD_DISTANCE

标准库

平台没有符合标准的 std::distance 版本。.

BOOST_NO_STD_ITERATOR

标准库

C++ 实现不提供 std::iterator 类。

BOOST_NO_STD_ITERATOR_TRAITS

标准库

编译器不提供符合标准的 std::iterator_traits 实现。注意,编译器有可能提供非标准的实现。

BOOST_NO_STD_LOCALE

标准库

标准库没有 std::locale.

BOOST_NO_STD_MESSAGES

标准库

标准库没有符合标准的 std::messages facet.

BOOST_NO_STD_MIN_MAX

标准库

C++标准库不提供 min() 和 max() 模板函数,它们应该在 <algorithm> 中。 

BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN

标准库

如果标准库的输出迭代器不是可赋值的,就定义它。

BOOST_NO_STD_TYPEINFO

标准库

<typeinfo> 头文件将 type_info 声明在全局名字空间而不是 namespace std.

BOOST_NO_STD_USE_FACET

标准库

标准库没有符合标准的 std::use_facet.

BOOST_NO_STD_WSTREAMBUF

标准库

标准库没有 std::basic_streambuf<wchar_t> 的实现,或者不完整,或者有缺陷。

BOOST_NO_STD_WSTRING

标准库

标准库没有 std::wstring.

BOOST_NO_STDC_NAMESPACE

编译器, 平台

C++中的C库函数标准头文件(即 <c...> 头文件)中的内容没有位於名字空间
std. 这个测试是很困难的 - 有些"假装"为标准C函数的库通过增加 using 声明来导入这些函数到名字空间 std, 不幸的是它们没有覆盖所有函数... 

BOOST_NO_STRINGSTREAM

标准库

C++实现不提供 <sstream> 头文件。

BOOST_NO_SWPRINTF

平台

平台没有符合标准的  swprintf 版本。

BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

编译器

不支持类模板偏特化(14.5.4 [temp.class.spec]).

BOOST_NO_TEMPLATED_IOSTREAMS

标准库

标准库不提供模板化的 iostream 类。

BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS

标准库

标准库没有为容器提供模板化的迭代器结构函数。

BOOST_NO_TEMPLATE_TEMPLATES

编译器

编译器不支持模板模板参数。

BOOST_NO_TYPEID

编译器

编译器根本不支持 typeid 操作符。

BOOST_NO_UNREACHABLE_RETURN_DETECTION

编译器

如果 return 语句不可到达,则不要求必须有 return 语句,但是有些编译器坚持要有,如果发生这种情形,会导致一串警告。

BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE

编译器

编译器不接受用 using 声明将一个函数从基类的 typename 带入到派生类中,如果派生类中已经有同名的函数。

BOOST_NO_USING_TEMPLATE

编译器

编译器不接受用 using 声明将一个模板类或模板函数从另一个名字空间导入。原本 Borland 存在导入到全局名字空间或从全局名字空间导入的问题,后来扩展以 MSVC6,它存在导入模板类(但不是模板函数)的问题。

BOOST_NO_VOID_RETURNS

编译器

编译器不允许一个 void 函数返回对另一个 void 函数的调用结果。 

void f() {}
void g() { return f(); }

以下宏描述了不被C++标准要求的一些特性。该宏只在该特性存在时被定义。

说明

BOOST_HAS_BETHREADS

平台

平台支持 BeOS 风格的线程。

BOOST_HAS_CLOCK_GETTIME

平台

平台有 POSIX API clock_gettime.

BOOST_HAS_DECLSPEC

编译器

编译器用 __declspec(dllexport) 和 __declspec(dllimport) 来从
dll 导出/导入 符号。

BOOST

抱歉!评论已关闭.