stl_config.h
. // Filename: stl_config.h
.
. // Comment By: 凝霜
. // E-mail: mdl2009@vip.qq.com
. // Blog: http://blog.csdn.net/mdl13412
.
. /*
8. * Copyright (c) 1996-1997
9. * Silicon Graphics Computer Systems, Inc.
10. *
11. * Permission to use, copy, modify, distribute and sell this software
12. * and its documentation for any purpose is hereby granted without fee,
13. * provided that the above copyright notice appear in all copies and
14. * that both that copyright notice and this permission notice appear
15. * in supporting documentation. Silicon Graphics makes no
16. * representations about the suitability of this software for any
17. * purpose. It is provided "as is" without express or implied warranty.
18. */
.
. /* NOTE: This is an internal header file, included by other STL headers.
21. * You should not attempt to use it directly.
22. */
.
. #ifndef __STL_CONFIG_H
. #define __STL_CONFIG_H
.
. // 本配置文件功能表:
. // (1) 如果不编译器没有定义bool, true, false则定义
. // (2) 如果编译器不支持drand48()函数则定义__STL_NO_DRAND48
. // 注: drand48产生双精度的伪随机数, 因为采用了48bit计算, 故名drand48
. // (3) 如果编译器不支持static members of template classes(模板类静态成员),
. // 则定义__STL_STATIC_TEMPLATE_MEMBER_BUG
. // (4) 如果编译器不支持'typename'关键字, 则将'typename'定义为空(null macro)
. // (5) 如果编译器支持partial specialization of class templates(模板类偏特化),
. // 则定义__STL_CLASS_PARTIAL_SPECIALIZATION
. // 参考文献: http://msdn.microsoft.com/en-us/library/9w7t3kf1(v=VS.71).aspx
. // (6) 如果编译器支持partial ordering of function templates(模板函数特化优先级),
. // 则定义__STL_FUNCTION_TMPL_PARTIAL_ORDER
. // 参考资料: http://msdn.microsoft.com/zh-cn/library/zaycz069.aspx
. // (7) 如果编译器支持calling a function template by providing its template
. // arguments explicitly(显式指定调用模板函数的模板参数)
. // 则定义__STL_EXPLICIT_FUNCTION_TMPL_ARGS
. // (8) 如果编译器支持template members of classes(类模板成员),
. // 则定义__STL_MEMBER_TEMPLATES
. // (9) 如果编译器不支持'explicit'关键字, 则将'explicit'定义为空(null macro)
. // (10) 如果编译器不能根据前一个模板参数设定后面的默认模板参数,
. // 则定义__STL_LIMITED_DEFAULT_TEMPLATES
. // (11) 如果编译器处理模板函数的non-type模板参数类型推断有困难,
. // 则定义__STL_NON_TYPE_TMPL_PARAM_BUG
. // (12) 如果编译器不支持迭代器使用'->'操作符,
. // 则定义__SGI_STL_NO_ARROW_OPERATOR
. // (13) 如果编译器(在当前编译模式下)支持异常,
. // 则定义__STL_USE_EXCEPTIONS
. // (14) 如果我们将STL放进命名空间中,
. // 则定义__STL_USE_NAMESPACES
. // (15) 如果本STL在SGI的编译器上编译, 并且用户没有选择pthreads或者no threads,
. // 则默认使用__STL_SGI_THREADS
. // 注: POSIX thread 简称为pthread, Posix线程是一个POSIX标准线程.
. // (16) 如果本STL在Win32平台的编译器上使用多线程模式编译,
. // 则定义__STL_WIN32THREADS
. // (17) 适当的定义命名空间相关的宏(__STD, __STL_BEGIN_NAMESPACE, 等)
. // (18) 适当的定义异常相关的宏(__STL_TRY, __STL_UNWIND, 等)
. // (19) 根据是否定义__STL_ASSERTIONS, 将__stl_assert定义为断言或者空(null macro)
.
. #ifdef _PTHREADS
. # define __STL_PTHREADS
. #endif
.
. // 如果编译器不提供本STL需要的一些功能,则定义__STL_NEED_XXX
. # 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 >= ) && 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__ < || (__GNUC__ == && __GNUC_MINOR__ < )
. # 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.
110. It should be upgraded to glibc 2.0 or later. */
. # if !defined(_NOTHREADS) && __GLIBC__ >= && defined(_G_USING_THUNKS)
. # define __STL_PTHREADS
. # endif
. # ifdef __EXCEPTIONS
. # define __STL_USE_EXCEPTIONS
. # endif
. # endif
.
. // Sun C++ compiler
. # if defined(__SUNPRO_CC)
. # define __STL_NEED_BOOL
. # define __STL_NEED_TYPENAME
. # define __STL_NEED_EXPLICIT
. # define __STL_USE_EXCEPTIONS
. # endif
.
. // TODO: 这个我没找到资料, 如果你知道或者有相关资料请联系我, Thank U
. # if defined(__COMO__)
. # define __STL_MEMBER_TEMPLATES
. # define __STL_CLASS_PARTIAL_SPECIALIZATION
. # define __STL_USE_EXCEPTIONS
. # define __STL_USE_NAMESPACES
. # endif
.
. // _MSC_VER 定义微软编译器的版本
. // MS VC++ 10.0 _MSC_VER = 1600
. // MS VC++ 9.0 _MSC_VER = 1500
. // MS VC++ 8.0 _MSC_VER = 1400
. // MS VC++ 7.1 _MSC_VER = 1310
. // MS VC++ 7.0 _MSC_VER = 1300
. // MS VC++ 6.0 _MSC_VER = 1200
. // MS VC++ 5.0 _MSC_VER = 1100
. # if defined(_MSC_VER)
. # if _MSC_VER >
. # include <yvals.h>
. # else
. # define __STL_NEED_BOOL
. # endif
. # define __STL_NO_DRAND48
. # define __STL_NEED_TYPENAME
. # if _MSC_VER <
. # 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
. # define false
. # 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: %s\n", \
. __FILE__, __LINE__, # expr); abort(); }
. #else
. # define __stl_assert(expr)
. #endif
.
. #endif /* __STL_CONFIG_H */
.
. // Local Variables:
. // mode:C++
. // End:

STL stl_config.h的更多相关文章

  1. stl_config.h基本宏

    四.宏: (其实呢, 我们所有的宏都包含在了 "stl_config.h"头文件中.) //这些宏是怎么判断是否需要定义:是否有指定的宏,还有一些特定的编译器也可能支持. 4.1. ...

  2. STL defalloc.h

    defalloc.h . // Filename: defalloc.h . . // Comment By: 凝霜 . // E-mail: mdl2009@vip.qq.com . // Blog ...

  3. STL stl_alloc.h

    # // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...

  4. STL stl_uninitialized.h

    stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...

  5. STL stl_construct.h

    stl_construct.h // Filename: stl_construct.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog ...

  6. STL源码剖析——Iterators与Traits编程#5 __type_traits

    上节给出了iterator_traits以及用到traits机制的部分函数的完整代码,可以看到traits机制能够提取迭代器的特性从而调用不同的函数,实现效率的最大化.显然这么好的机制不应该仅局限于在 ...

  7. STL源码剖析—stl_config

    操作系统:centos 6.4STL源码版本:3.3 前言:    要看一个项目的源码,首先要选中切入点.    那么在sgi stl 标准库中,其切入点是什么呢?    答案是:stl_config ...

  8. STL源代码剖析——基本算法stl_algobase.h

    前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...

  9. STL源码标注_空间适配器

    /* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...

随机推荐

  1. 【BZOJ4269】再见Xor 高斯消元

    [BZOJ4269]再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整 ...

  2. 线段覆盖 2(序列DP)

    Code vs 3027 线段覆盖 2   题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段, ...

  3. fedora找开ftpd服务器并以root登陆

    工作原因需要在federal中弄个vsftpd再用root去登陆(我知道这样不太安全) 确认系统的版本 [root@localhost ~]# uname -a Linux localhost.loc ...

  4. mac上好用的软件

    1 newfile menu for Mac 右键创建文件.

  5. table表格用tbody新属性获取DOM元素

    // alert(oTab.getElementsByTagName("tbody")[0] // .getElementsByTagName('tr')[1] // .getEl ...

  6. JVM相关的几个基本概念

    1.虚拟机是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统 2.常见的虚拟机有VMWare,Visual Box,JVM等 VMWare或者Visual Box模拟的 ...

  7. node.js版本升级

      node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: npm install -g n 第二步: 升级node.js到最新稳定版 n stabl ...

  8. python -virtualenvwrapper 切换不同的python版本

    环境: 安装了python2.7和python3.4, 两个版本都安装了virtualenv和virtualenvwrapper 在windows cmd中键入mkvirtualenv -p C:\P ...

  9. centos7 使用 maven

    http://www.cnblogs.com/jackluo/archive/2013/02/06/2901816.html

  10. C# Lambda表达式与Linq

    , , , , , , }; //linq写法 var res = from i in arry select i; //lambda写法 var res = arry.Select(i => ...