注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一路

To find the final symmetry & beauty

 
 
 

日志

 
 
 
 

SGI STL源码文件stl_config.h (注释)  

2011-02-14 19:08:35|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

 

/ *

*

* Copyright (c) 1994

* Hewlett- Packard Company

*

* Permission to use, copy, modify, distribute and sell this software

* and its documentation for any purpose is hereby granted without fee,

* provided that the above copyright notice appear in all copies and

* that both that copyright notice and this permission notice appear

* in supporting documentation. Hewlett- Packard Company makes no

* representations about the suitability of this software for any

* purpose. It is provided "as is" without express or implied warranty.

*

* Copyright (c) 1997

* Silicon Graphics

*

* Permission to use, copy, modify, distribute and sell this software

* and its documentation for any purpose is hereby granted without fee,

* provided that the above copyright notice appear in all copies and

* that both that copyright notice and this permission notice appear

* in supporting documentation. Silicon Graphics makes no

* representations about the suitability of this software for any

* purpose. It is provided "as is" without express or implied warranty.

*

*/

 

#ifndef STL_CONFIG_H

# define STL_CONFIG_H

 

/ / Flags:

/ / *     STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin

/ /    type.

/ / *     STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.

/ / *     STL_NO_DRAND48: defined if the compiler doesn't have the drand48

/ /    function.

/ / *     STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle

/ /    static members of template classes.

/ / *     STL_STATIC_CONST_INIT_BUG: defined if the compiler can't handle a

/ /    constant- initializer in the declaration of a static const data member

/ /    of integer type. (See section 9.4.2, paragraph 4, of the C++ standard.)

/ / *     STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports

/ /    partial specialization of template classes.

/ / *     STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler

/ /    supports partial specialization syntax for full specialization of

/ /    class templates. (Even if it doesn't actually support partial

/ /    specialization itself.)

/ / *     STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports

/ /    partial ordering of function templates. (a.k.a partial specialization

/ /    of function templates.)

// 这里是定意是否支持函数模板的偏序实例化,这个功能其实要比模板类的偏特化复杂得多,而且编译器与C++标准委员会对这个特性的说明还不是很明确,还有不少问题,但这真的是一个十分强大的功能,不可不知。

/ / *     STL_MEMBER_TEMPLATES: defined if the compiler supports template

/ /    member functions of classes.

/ / *     STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports

/ /    nested classes that are member templates of other classes.

/ / *     STL_TEMPLATE_FRIENDS: defined if the compiler supports templatized

/ /    friend declarations.

/ / *     STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler

/ /    supports calling a function template by providing its template

/ /    arguments explicitly.

 

 

 

/ / *     STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable

/ /    to handle default template parameters that depend on previous template

/ /    parameters.

/ / *     STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with

/ /    function template argument deduction for non- type template parameters.

/ / *     SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable

/ /    to support the - > operator for iterators.

/ / *     STL_DEFAULT_CONSTRUCTOR_BUG: defined if T() does not work properly

/ /    when T is a builtin type.

/ / *     STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation

/ /    mode) supports exceptions.

/ / *     STL_USE_NAMESPACES: defined if the compiler has the necessary

/ /    support for namespaces.

/ / *     STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a

/ /    standard- conforming header <exception>.

/ / *     STL_NO_BAD_ALLOC: defined if the compiler does not have a <new>

/ /    header, or if <new> does not contain a bad_alloc class. If a bad_alloc

/ /    class exists, it is assumed to be in namespace std.

/ / *     STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX

/ /    system in multithreaded mode, using native SGI threads instead of

/ /    pthreads.

/ / *     STL_WIN32THREADS: defined if this is being compiled on a WIN32

/ /    compiler in multithreaded mode.

/ / *     STL_PTHREADS: defined if we should use portable pthreads

/ /    synchronization.

/ / *     STL_UITHREADS: defined if we should use UI / solaris / UnixWare threads

/ /    synchronization. UIthreads are similar to pthreads, but are based

/ /    on an earlier version of the Posix threads standard.

/ / *     STL_LONG_LONG if the compiler has long long and unsigned long long

/ /    types. (They're not in the C++ standard, but they are expected to be

/ /    included in the forthcoming C9X standard.)

/ / *     STL_THREADS is defined if thread safety is needed.

/ / *     STL_VOLATILE is defined to be "volatile" if threads are being

/ /    used, and the empty string otherwise.

/ / *     STL_USE_CONCEPT_CHECKS enables some extra compile- time error

/ /    checking to make sure that user- defined template arguments satisfy

/ /    all of the appropriate requirements. This may result in more

/ /    comprehensible error messages. It incurs no runtime overhead. This

/ /    feature requires member templates and partial specialization.

// 这说的是C++的概念检查,什么是所谓概念我在以后的日志中会说,这里说它需要一些c++特性的支持,比如成员函数模板和偏特化,但是以我个人来看,这个特性如果能完全工作,还需要一些其它的特性的支持,比如模板的懒惰实例化规则和懒语法检查之类的东西。

/ / *     STL_NO_USING_CLAUSE_IN_CLASS: The compiler does not handle "using"

/ /    clauses inside of class definitions.

/ / *     STL_NO_FRIEND_TEMPLATE_CLASS: The compiler does not handle friend

/ /    declaractions where the friend is a template class.

/ / *     STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE: The compiler does not

/ /    support the use of a function pointer type as the argument

/ /    for a template.

/ / *     STL_MEMBER_TEMPLATE_KEYWORD: standard C++ requires the template

/ /    keyword in a few new places (14.2.4). This flag is set for

/ /    compilers that support (and require) this usage.

 

 

/ / User- settable macros that control compilation:

/ / *     STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older

/ /    SGI- style allocators, instead of standard- conforming allocators,

/ /    even if the compiler supports all of the language features needed

/ /    for standard- conforming allocators.

/ / *     STL_NO_NAMESPACES: if defined, don't put the library in namespace

/ /    std, even if the compiler supports namespaces.

 

 

 

/ / *     STL_NO_RELOPS_NAMESPACE: if defined, don't put the relational

/ /    operator templates (>, <=. >=, ! =) in namespace std::rel_ops, even

/ /    if the compiler supports namespaces and partial ordering of

/ /    function templates.

/ / *     STL_ASSERTIONS: if defined, then enable runtime checking through the

/ /         stl_assert macro.

/ / * _PTHREADS: if defined, use Posix threads for multithreading support.

/ / * _UITHREADS:if defined, use SCO/ Solaris/ UI threads for multithreading

/ /    support

/ / * _NOTHREADS: if defined, don't use any multithreading support.

/ / * _STL_NO_CONCEPT_CHECKS: if defined, disables the error checking that

/ /    we get from     STL_USE_CONCEPT_CHECKS.

/ / *     STL_USE_NEW_IOSTREAMS: if defined, then the STL will use new,

/ /    standard- conforming iostreams (e.g. the <iosfwd> header). If not

/ /    defined, the STL will use old cfront- style iostreams (e.g. the

/ /    <iostream.h> header).

 

/ / Other macros defined by this file:

 

/ / * bool, true, and false, if     STL_NO_BOOL is defined.

/ / * typename, as a null macro if it's not already a keyword.

/ / * explicit, as a null macro if it's not already a keyword.

/ / * namespace- related macros (     STD,     STL_BEGIN_NAMESPACE, etc.)

/ / * exception- related macros (     STL_TRY,     STL_UNWIND, etc.)

/ / *     stl_assert, either as a test or as a null macro, depending on

/ /    whether or not     STL_ASSERTIONS is defined.

 

# if defined(_PTHREADS) && !defined(_NOTHREADS)

#    define STL_PTHREADS

# endif

 

# if defined(_UITHREADS) && !defined(_PTHREADS) && !defined(_NOTHREADS)

#    define STL_UITHREADS

# endif

 

# if defined( sgi) && !defined(__GNUC__)

#    include <standards.h>

#    if !defined(_BOOL)

#    define STL_NO_BOOL

#    endif

#    if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32

#    define STL_STATIC_CONST_INIT_BUG

#    endif

#    if defined(_WCHAR_T_IS_KEYWORD)

#    define STL_HAS_WCHAR_T

#    endif

#    if !defined(_TYPENAME_IS_KEYWORD)

#    define STL_NEED_TYPENAME

#    endif

#    ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    endif

#    if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM !=

_ABIO32

#    define STL_FUNCTION_TMPL_PARTIAL_ORDER

#    endif

#    ifdef _MEMBER_TEMPLATES

#    define STL_MEMBER_TEMPLATES

#    define STL_TEMPLATE_FRIENDS

 

 

 

#    define STL_MEMBER_TEMPLATE_CLASSES

#    endif

#    if defined(_MEMBER_TEMPLATE_KEYWORD)

#    define STL_MEMBER_TEMPLATE_KEYWORD

#    endif

#    if defined(_STANDARD_C_PLUS_PLUS)

#    define STL_EXPLICIT_FUNCTION_TMPL_ARGS

#    endif

#    if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM !=

_ABIO32

#    define STL_MEMBER_TEMPLATE_KEYWORD

#    endif

#    if COMPILER_VERSION < 720 || (defined(_MIPS_SIM) && _MIPS_SIM ==

_ABIO32)

#    define STL_DEFAULT_CONSTRUCTOR_BUG

#    endif

#    if !defined(_EXPLICIT_IS_KEYWORD)

#    define STL_NEED_EXPLICIT

#    endif

#    ifdef EXCEPTIONS

#    define STL_USE_EXCEPTIONS

#    endif

#    if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)

#    define STL_HAS_NAMESPACES

#    endif

#    if (_COMPILER_VERSION < 721) || \

!defined( STL_HAS_NAMESPACES) || defined(__STL_NO_NAMESPACES)

#    define STL_NO_EXCEPTION_HEADER

#    endif

#    if _COMPILER_VERSION < 730 || !defined(_STANDARD_C_PLUS_PLUS) || \

!defined(_NAMESPACES)

#    define STL_NO_BAD_ALLOC

#    endif

#    if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)

#    define STL_SGI_THREADS

#    endif

#    if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI

#    define STL_LONG_LONG

#    endif

#    if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)

#    define STL_USE_NEW_IOSTREAMS

#    endif

#    if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)

#    define STL_CAN_THROW_RANGE_ERRORS

#    endif

#    if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)

#    define SGI_STL_USE_AUTO_PTR_CONVERSIONS

#    endif

# endif

 

 

/ *

* Jochen Schlick '1999 - added new #defines (     STL)_UITHREADS (for

*    providing SCO / Solaris / UI thread support)

*    - added the necessary defines for the SCO UDK 7

*    compiler (and its template friend behavior)

*    - all UDK7 specific STL changes are based on the

*    macro     USLC      being defined

*/

/ / SCO UDK 7 compiler (UnixWare 7x, OSR 5, UnixWare 2x)

 

 

 

# if defined( USLC__)

#    define STL_HAS_WCHAR_T

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    define STL_PARTIAL_SPECIALIZATION_SYNTAX

#    define STL_FUNCTION_TMPL_PARTIAL_ORDER

#    define STL_MEMBER_TEMPLATES

#    define STL_MEMBER_TEMPLATE_CLASSES

#    define STL_USE_EXCEPTIONS

#    define STL_HAS_NAMESPACES

#    define STL_USE_NAMESPACES

#    define STL_LONG_LONG

#    if defined(_REENTRANT)

#    define _UITHREADS    / * if    UnixWare < 7.0.1 */

#    define STL_UITHREADS

/ /    use the following defines instead of the UI threads defines when

/ /    you want to use POSIX threads

/ / #    define _PTHREADS    / * only if UnixWare >=7.0.1 */

/ / #    define     STL_PTHREADS

#    endif

# endif

 

 

 

 

# ifdef GNUC     

#    if GNUC     

 

== 2 && GNUC_MINOR     

 

<= 7

 

#    define STL_STATIC_TEMPLATE_MEMBER_BUG

#    endif

#    if GNUC < 2

#    define STL_NEED_TYPENAME

#    define STL_NEED_EXPLICIT

#    endif

 

#    if GNUC     

== 2 && GNUC_MINOR     

<= 8

 

#    define STL_NO_EXCEPTION_HEADER

#    define STL_NO_BAD_ALLOC

#    endif

 

#    if GNUC     

== 2 && GNUC_MINOR     

>= 8

 

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    define STL_FUNCTION_TMPL_PARTIAL_ORDER

#    define STL_EXPLICIT_FUNCTION_TMPL_ARGS

#    define STL_MEMBER_TEMPLATES

#    define STL_CAN_THROW_RANGE_ERRORS

/ /    g++ 2.8.1 supports member template functions, but not member

/ /    template nested classes.

 

#    if GNUC_MINOR     

>= 9

 

#    define STL_MEMBER_TEMPLATE_CLASSES

#    define STL_TEMPLATE_FRIENDS

#    define SGI_STL_USE_AUTO_PTR_CONVERSIONS

#    define STL_HAS_NAMESPACES

/ / #    define     STL_USE_NEW_IOSTREAMS

#    endif

#    endif

#    define STL_DEFAULT_CONSTRUCTOR_BUG

#    ifdef EXCEPTIONS

#    define STL_USE_EXCEPTIONS

#    endif

#    ifdef _REENTRANT

#    define STL_PTHREADS

#    endif

 

#    if ( GNUC     

< 2) || ( GNUC     

== 2 && __GNUC_MINOR     

< 95)

 

#    define STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE

 

 

 

#    endif

# endif

 

# if defined( SUNPRO_CC)

#    define STL_NO_BOOL

#    define STL_NEED_TYPENAME

#    define STL_NEED_EXPLICIT

#    define STL_USE_EXCEPTIONS

#    ifdef _REENTRANT

#    define STL_PTHREADS

#    endif

#    define SGI_STL_NO_ARROW_OPERATOR

#    define STL_PARTIAL_SPECIALIZATION_SYNTAX

#    define STL_NO_EXCEPTION_HEADER

#    define STL_NO_BAD_ALLOC

# endif

 

# if defined( COMO__)

#    define STL_MEMBER_TEMPLATES

#    define STL_MEMBER_TEMPLATE_CLASSES

#    define STL_TEMPLATE_FRIENDS

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    define STL_USE_EXCEPTIONS

#    define STL_HAS_NAMESPACES

# endif

 

/ / Intel compiler, which uses the EDG front end.

# if defined( ICL)

#    define STL_LONG_LONG

#    define STL_MEMBER_TEMPLATES

#    define STL_MEMBER_TEMPLATE_CLASSES

#    define STL_TEMPLATE_FRIENDS

#    define STL_FUNCTION_TMPL_PARTIAL_ORDER

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    define STL_NO_DRAND48

#    define STL_HAS_NAMESPACES

#    define STL_USE_EXCEPTIONS

#    define STL_MEMBER_TEMPLATE_KEYWORD

#    ifdef _CPPUNWIND

#    define STL_USE_EXCEPTIONS

#    endif

#    ifdef _MT

#    define STL_WIN32THREADS

#    endif

# endif

 

/ / Mingw32, egcs compiler using the Microsoft C runtime

# if defined( MINGW32__)

#    define STL_NO_DRAND48

#    ifdef _MT

#    define STL_WIN32THREADS

#    endif

# endif

 

/ / Cygwin32, egcs compiler on MS Windows

# if defined( CYGWIN__)

#    define STL_NO_DRAND48

# endif

 

 

 

 

/ / Microsoft compiler.

# if defined(_MSC_VER) && !defined(__ICL) && !defined( MWERKS__)

#    define STL_NO_DRAND48

#    define STL_STATIC_CONST_INIT_BUG

#    define STL_NEED_TYPENAME

#    define STL_NO_USING_CLAUSE_IN_CLASS

#    define STL_NO_FRIEND_TEMPLATE_CLASS

#    if _MSC_VER < 1100    / * 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */

#    define STL_NEED_EXPLICIT

#    define STL_NO_BOOL

#    define STL_NO_BAD_ALLOC

#    endif

#    if _MSC_VER > 1000

#    include <yvals.h>

#    define STL_DONT_USE_BOOL_TYPEDEF

#    endif

#    define STL_NON_TYPE_TMPL_PARAM_BUG

#    define SGI_STL_NO_ARROW_OPERATOR

#    define STL_DEFAULT_CONSTRUCTOR_BUG

#    ifdef _CPPUNWIND

#    define STL_USE_EXCEPTIONS

#    endif

#    ifdef _MT

#    define STL_WIN32THREADS

#    endif

#    if _MSC_VER >= 1200

#    define STL_PARTIAL_SPECIALIZATION_SYNTAX

#    define STL_HAS_NAMESPACES

#    define STL_CAN_THROW_RANGE_ERRORS

#    define NOMINMAX

#    undef min

#    undef max

/ / disable warning 'initializers put in unrecognized initialization area'

#    pragma warning ( disable : 4075 )

/ / disable warning 'empty controlled statement found'

#    pragma warning ( disable : 4390 )

/ / disable warning 'debug symbol greater than 255 chars'

#    pragma warning ( disable : 4786 )

#    endif

#    if _MSC_VER < 1100

#    define STL_NO_EXCEPTION_HEADER

#    define STL_NO_BAD_ALLOC

#    endif

/ / Because of a Microsoft front end bug, we must not provide a

/ / namespace qualifier when declaring a friend function.

#    define STD_QUALIFIER

# endif

 

# if defined( BORLANDC__)

#    define STL_NO_BAD_ALLOC

#    define STL_NO_DRAND48

#    define STL_DEFAULT_CONSTRUCTOR_BUG

 

#    if BORLANDC     

>= 0x540 / * C++ Builder 4.0 */

 

#    define STL_CLASS_PARTIAL_SPECIALIZATION

#    define STL_FUNCTION_TMPL_PARTIAL_ORDER

#    define STL_EXPLICIT_FUNCTION_TMPL_ARGS

#    define STL_MEMBER_TEMPLATES

#    define STL_TEMPLATE_FRIENDS

#    else

 

 

 

#    define STL_NEED_TYPENAME

#    define STL_LIMITED_DEFAULT_TEMPLATES

#    define SGI_STL_NO_ARROW_OPERATOR

#    define STL_NON_TYPE_TMPL_PARAM_BUG

#    endif

#    ifdef _CPPUNWIND

#    define STL_USE_EXCEPTIONS

#    endif

#    ifdef MT     

#    define STL_WIN32THREADS

#    endif

# endif

 

# if defined( STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)

typedef int bool;

#    define true 1

#    define false 0

# endif

 

# ifdef STL_NEED_TYPENAME

#    define typename //侯杰先生对这个有怀疑,我认为这里是为了模板类的类成员定义的比如用在typename T::type_member这种地方

# endif

 

# ifdef STL_LIMITED_DEFAULT_TEMPLATES

#    define STL_DEPENDENT_DEFAULT_TMPL(_Tp)

# else

#    define STL_DEPENDENT_DEFAULT_TMPL(_Tp) = _Tp

# endif

 

# ifdef STL_MEMBER_TEMPLATE_KEYWORD

#    define STL_TEMPLATE template

# else

#    define STL_TEMPLATE

# endif

 

# ifdef STL_NEED_EXPLICIT

#    define explicit

# endif

 

# ifdef STL_EXPLICIT_FUNCTION_TMPL_ARGS

#    define STL_NULL_TMPL_ARGS <>

# else

#    define STL_NULL_TMPL_ARGS

# endif

 

# if defined( STL_CLASS_PARTIAL_SPECIALIZATION) \

|| defined ( STL_PARTIAL_SPECIALIZATION_SYNTAX)

#    define STL_TEMPLATE_NULL template<>

//偏特化时用的语法,有点怪,习惯就好了

# else

#    define STL_TEMPLATE_NULL

# endif

 

/ / Use standard- conforming allocators if we have the necessary language

/ / features.     STL_USE_SGI_ALLOCATORS is a hook so that users can

/ / disable new- style allocators, and continue to use the same kind of

/ / allocators as before, without having to edit library headers.

 

 

 

# if defined( STL_CLASS_PARTIAL_SPECIALIZATION) && \

defined( STL_MEMBER_TEMPLATES) && \

defined( STL_MEMBER_TEMPLATE_CLASSES) && \

!defined( STL_NO_BOOL) && \

!defined( STL_NON_TYPE_TMPL_PARAM_BUG) && \

!defined( STL_LIMITED_DEFAULT_TEMPLATES) && \

!defined( STL_USE_SGI_ALLOCATORS)

#    define STL_USE_STD_ALLOCATORS

# endif

 

# ifndef STL_DEFAULT_ALLOCATOR

#    ifdef STL_USE_STD_ALLOCATORS

#    define STL_DEFAULT_ALLOCATOR(T) allocator< T >

#    else

#    define STL_DEFAULT_ALLOCATOR(T) alloc

#    endif

# endif

 

/ /     STL_NO_NAMESPACES is a hook so that users can disable namespaces

/ / without having to edit library headers.     STL_NO_RELOPS_NAMESPACE is

/ / a hook so that users can disable the std::rel_ops namespace, keeping

/ / the relational operator template in namespace std, without having to

/ / edit library headers.

# if defined( STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)

#    define STL_USE_NAMESPACES

#    define STD std

#    define STL_BEGIN_NAMESPACE namespace std {

#    define STL_END_NAMESPACE }

#    if defined( STL_FUNCTION_TMPL_PARTIAL_ORDER) && \

!defined( STL_NO_RELOPS_NAMESPACE)

#    define STL_USE_NAMESPACE_FOR_RELOPS

#    define STL_BEGIN_RELOPS_NAMESPACE namespace std { namespace

rel_ops {

#    define STL_END_RELOPS_NAMESPACE } }

#    define STD_RELOPS std::rel_ops

#    else / * Use std::rel_ops namespace */

#    define STL_USE_NAMESPACE_FOR_RELOPS

#    define STL_BEGIN_RELOPS_NAMESPACE namespace std {

#    define STL_END_RELOPS_NAMESPACE }

#    define STD_RELOPS std

#    endif / * Use std::rel_ops namespace */

# else

#    define STD

#    define STL_BEGIN_NAMESPACE

#    define STL_END_NAMESPACE

#    undef     STL_USE_NAMESPACE_FOR_RELOPS

#    define STL_BEGIN_RELOPS_NAMESPACE

#    define STL_END_RELOPS_NAMESPACE

#    define STD_RELOPS

#    undef     STL_USE_NAMESPACES

# endif

 

/ / Some versions of the EDG front end sometimes require an explicit

/ / namespace spec where they shouldn't. This macro facilitates that.

/ / If the bug becomes irrelevant, then all uses of     STD_QUALIFIER

/ / should be removed. The 7.3 beta SGI compiler has this bug, but the

/ / MR version is not expected to have it.

 

# if defined( STL_USE_NAMESPACES) && !defined(__STD_QUALIFIER)

#    define STD_QUALIFIER std::

 

 

 

# else

#    define STD_QUALIFIER

# endif

 

# ifdef STL_USE_EXCEPTIONS

#    define STL_TRY try

#    define STL_CATCH_ALL catch(...)

#    define STL_THROW(x) throw x

#    define STL_RETHROW throw

#    define STL_NOTHROW throw()

#    define STL_UNWIND(action) catch(...) { action; throw; }

# else

#    define STL_TRY

#    define STL_CATCH_ALL if (false)

#    define STL_THROW(x)

#    define STL_RETHROW

#    define STL_NOTHROW

#    define STL_UNWIND(action)

# endif

 

#ifdef STL_ASSERTIONS

# include <stdio.h>

//如果不知这里的宏语法可以查看我前面的日志,这个宏其实是很简单的

# define stl_assert(expr) \

if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n",

 

\

 

#else

 

FILE__, LINE__, # expr); abort(); }

 

# define stl_assert(expr)

#endif

 

#if defined( STL_WIN32THREADS) || defined(__STL_SGI_THREADS) \

|| defined( STL_PTHREADS)    || defined(__STL_UITHREADS)

#    define STL_THREADS

#    define STL_VOLATILE volatile

#else

#    define STL_VOLATILE

#endif

 

#if defined( STL_CLASS_PARTIAL_SPECIALIZATION) \

&& defined( STL_MEMBER_TEMPLATES) \

&& !defined(_STL_NO_CONCEPT_CHECKS)

#    define STL_USE_CONCEPT_CHECKS

#endif

 

 

#endif / *     STL_CONFIG_H */

 

/ / Local Variables:

/ / mode:C++

/ / End:

// 关于其中一些编译器组态解释可以查看我的日志,我对其中一些不太常用的生易搞错的做了一些解释,关于其它特性请查看C++ primer一书,这本书最新出到第四版了。

  评论这张
 
阅读(2282)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017