/ *
*
* 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一书,这本书最新出到第四版了。
评论