stl_config.h
资源名称:Vc_STL.rar [点击查看]
上传用户:sichengcw
上传日期:2009-02-17
资源大小:202k
文件大小:8k
源码类别:
STL
开发平台:
Visual C++
- /*
- *
- * 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
- // What this file does.
- // (1) Defines bool, true, and false if the compiler doesn't do so already.
- // (2) Defines __STL_NO_DRAND48 if the compiler's standard library does
- // not support the drand48() function.
- // (3) Defines __STL_STATIC_TEMPLATE_MEMBER_BUG if the compiler can't
- // handle static members of template classes.
- // (4) Defines 'typename' as a null macro if the compiler does not support
- // the typename keyword.
- // (5) Defines __STL_CLASS_PARTIAL_SPECIALIZATION if the compiler
- // supports partial specialization of class templates.
- // (6) Defines __STL_FUNCTION_TMPL_PARTIAL_ORDER if the compiler supports
- // partial ordering of function templates (a.k.a partial specialization
- // of function templates.
- // (7) Defines __STL_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler
- // supports calling a function template by providing its template
- // arguments explicitly.
- // (8) Defines __STL_MEMBER_TEMPLATES if the compiler supports
- // template members of classes.
- // (9) Defines 'explicit' as a null macro if the compiler does not support
- // the explicit keyword.
- // (10) Defines __STL_LIMITED_DEFAULT_TEMPLATES if the compiler is
- // unable to handle default template parameters that depend on
- // previous template parameters.
- // (11) Defines __STL_NON_TYPE_TMPL_PARAM_BUG if the compiler has
- // trouble performing function template argument deduction for
- // non-type template parameters.
- // (12) Defines __SGI_STL_NO_ARROW_OPERATOR if the compiler is unable
- // to support the -> operator for iterators.
- // (13) Defines __STL_USE_EXCEPTIONS if the compiler (in the current
- // compilation mode) supports exceptions.
- // (14) Define __STL_USE_NAMESPACES if we're putting the STL into a
- // namespace.
- // (15) Defines __STL_SGI_THREADS if this is being compiled on an SGI
- // compiler, and if the user hasn't selected pthreads or no threads
- // instead.
- // (16) Defines __STL_WIN32THREADS if this is being compiled on a
- // WIN32 compiler in multithreaded mode.
- // (17) Define namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
- // apropriately.
- // (18) Define exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
- // appropriately.
- // (19) Defines __stl_assert either as a test or as a null macro,
- // depending on whether or not __STL_ASSERTIONS is defined.
- #ifdef _PTHREADS
- # define __STL_PTHREADS
- #endif
- # if defined(__sgi) && !defined(__GNUC__)
- # if !defined(_BOOL)
- # define __STL_NEED_BOOL
- # endif
- # if !defined(_TYPENAME_IS_KEYWORD)
- # define __STL_NEED_TYPENAME
- # endif
- # ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
- # define __STL_CLASS_PARTIAL_SPECIALIZATION
- # endif
- # ifdef _MEMBER_TEMPLATES
- # define __STL_MEMBER_TEMPLATES
- # 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_USE_NAMESPACES
- # endif
- # if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
- # define __STL_SGI_THREADS
- # endif
- # endif
- # ifdef __GNUC__
- # include <_G_config.h>
- # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
- # define __STL_STATIC_TEMPLATE_MEMBER_BUG
- # define __STL_NEED_TYPENAME
- # define __STL_NEED_EXPLICIT
- # else
- # define __STL_CLASS_PARTIAL_SPECIALIZATION
- # define __STL_FUNCTION_TMPL_PARTIAL_ORDER
- # define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
- # define __STL_MEMBER_TEMPLATES
- # endif
- /* glibc pre 2.0 is very buggy. We have to disable thread for it.
- It should be upgraded to glibc 2.0 or later. */
- # if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)
- # define __STL_PTHREADS
- # endif
- # ifdef __EXCEPTIONS
- # define __STL_USE_EXCEPTIONS
- # endif
- # endif
- # if defined(__SUNPRO_CC)
- # define __STL_NEED_BOOL
- # define __STL_NEED_TYPENAME
- # define __STL_NEED_EXPLICIT
- # define __STL_USE_EXCEPTIONS
- # endif
- # if defined(__COMO__)
- # define __STL_MEMBER_TEMPLATES
- # define __STL_CLASS_PARTIAL_SPECIALIZATION
- # define __STL_USE_EXCEPTIONS
- # define __STL_USE_NAMESPACES
- # endif
- # if defined(_MSC_VER)
- # if _MSC_VER > 1000
- # include <yvals.h>
- # else
- # define __STL_NEED_BOOL
- # endif
- # define __STL_NO_DRAND48
- # define __STL_NEED_TYPENAME
- # if _MSC_VER < 1100
- # define __STL_NEED_EXPLICIT
- # endif
- # define __STL_NON_TYPE_TMPL_PARAM_BUG
- # define __SGI_STL_NO_ARROW_OPERATOR
- # ifdef _CPPUNWIND
- # define __STL_USE_EXCEPTIONS
- # endif
- # ifdef _MT
- # define __STL_WIN32THREADS
- # endif
- # endif
- # if defined(__BORLANDC__)
- # define __STL_NO_DRAND48
- # define __STL_NEED_TYPENAME
- # define __STL_LIMITED_DEFAULT_TEMPLATES
- # define __SGI_STL_NO_ARROW_OPERATOR
- # define __STL_NON_TYPE_TMPL_PARAM_BUG
- # ifdef _CPPUNWIND
- # define __STL_USE_EXCEPTIONS
- # endif
- # ifdef __MT__
- # define __STL_WIN32THREADS
- # endif
- # endif
- # if defined(__STL_NEED_BOOL)
- typedef int bool;
- # define true 1
- # define false 0
- # endif
- # ifdef __STL_NEED_TYPENAME
- # define typename
- # 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
- # ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- # define __STL_TEMPLATE_NULL template<>
- # else
- # define __STL_TEMPLATE_NULL
- # endif
- // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
- // without having to edit library headers.
- # if defined(__STL_USE_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
- # define __STD std
- # define __STL_BEGIN_NAMESPACE namespace std {
- # define __STL_END_NAMESPACE }
- # define __STL_USE_NAMESPACE_FOR_RELOPS
- # define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
- # define __STL_END_RELOPS_NAMESPACE }
- # define __STD_RELOPS std
- # 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
- # endif
- # ifdef __STL_USE_EXCEPTIONS
- # define __STL_TRY try
- # define __STL_CATCH_ALL catch(...)
- # 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_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: %sn",
- __FILE__, __LINE__, # expr); abort(); }
- #else
- # define __stl_assert(expr)
- #endif
- #endif /* __STL_CONFIG_H */
- // Local Variables:
- // mode:C++
- // End: