epoc32/include/tools/stlport/stl/config/features.h
branchSymbian2
changeset 2 2fe1408b6811
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/tools/stlport/stl/config/features.h	Tue Mar 16 16:12:26 2010 +0000
     1.3 @@ -0,0 +1,1194 @@
     1.4 + /*
     1.5 +  *
     1.6 +  * Copyright (c) 1994
     1.7 +  * Hewlett-Packard Company
     1.8 +  *
     1.9 +  * Copyright (c) 1996,1997
    1.10 +  * Silicon Graphics Computer Systems, Inc.
    1.11 +  *
    1.12 +  * Copyright (c) 1997
    1.13 +  * Moscow Center for SPARC Technology
    1.14 +  *
    1.15 +  * Copyright (c) 1999
    1.16 +  * Boris Fomitchev
    1.17 +  *
    1.18 +  * This material is provided "as is", with absolutely no warranty expressed
    1.19 +  * or implied. Any use is at your own risk.
    1.20 +  *
    1.21 +  * Permission to use or copy this software for any purpose is hereby granted
    1.22 +  * without fee, provided the above notices are retained on all copies.
    1.23 +  * Permission to modify the code and to distribute modified code is granted,
    1.24 +  * provided the above notices are retained, and a notice that the code was
    1.25 +  * modified is included with the above copyright notice.
    1.26 +  *
    1.27 +  */
    1.28 +
    1.29 +#ifndef _STLP_FEATURES_H
    1.30 +#define _STLP_FEATURES_H
    1.31 +
    1.32 +/*
    1.33 + * Purpose of this file:
    1.34 + *
    1.35 + * Defines all STLport settings.
    1.36 + * This file is actually a wrapper : it includes compiler-specific
    1.37 + * settings from <config/stlcomp.h>
    1.38 + * and user-defined settings from <stl_user_config.h>.
    1.39 + * See <config/stl_mycomp.h> and <stl_user_config.h> for the description
    1.40 + * of those macros
    1.41 + *
    1.42 + */
    1.43 +
    1.44 +/* Definition of the STLport version informations */
    1.45 +#include <stl/_stlport_version.h>
    1.46 +
    1.47 +/* Other macros defined by this file:
    1.48 +
    1.49 + * bool, true, and false, if _STLP_NO_BOOL is defined.
    1.50 + * typename, as a null macro if it's not already a keyword.
    1.51 + * explicit, as a null macro if it's not already a keyword.
    1.52 + * namespace-related macros (_STLP_STD, _STLP_BEGIN_NAMESPACE, etc.)
    1.53 + * exception-related macros (_STLP_TRY, _STLP_UNWIND, etc.)
    1.54 + * _STLP_ASSERT, either as a test or as a null macro, depending on
    1.55 +   whether or not _STLP_ASSERTIONS is defined.
    1.56 +*/
    1.57 +
    1.58 +/* Definition of the 2 STLport debug levels */
    1.59 +#define _STLP_STLPORT_DBG_LEVEL 1
    1.60 +#define _STLP_STANDARD_DBG_LEVEL 2
    1.61 +
    1.62 +/* Placeholder for user to override settings.
    1.63 + * It could be also used to mask settings from
    1.64 + * different directories.
    1.65 + */
    1.66 +#include <stl/config/user_config.h>
    1.67 +
    1.68 +#if defined (_STLP_DEBUG) && !defined (_STLP_DEBUG_LEVEL)
    1.69 +#  define _STLP_DEBUG_LEVEL _STLP_STLPORT_DBG_LEVEL
    1.70 +#endif
    1.71 +
    1.72 +#if defined (__BUILDING_STLPORT)
    1.73 +/* For the STLport implementation we can use everything:
    1.74 + */
    1.75 +#  if defined (_STLP_NO_ANACHRONISMS)
    1.76 +#    undef _STLP_NO_ANACHRONISMS
    1.77 +#  endif
    1.78 +#  if defined (_STLP_NO_EXTENSIONS)
    1.79 +#    undef _STLP_NO_EXTENSIONS
    1.80 +#  endif
    1.81 +/* Moreover there are things that has no sens:
    1.82 + */
    1.83 +#  if defined (_STLP_NO_IOSTREAMS)
    1.84 +#    error If you do not use iostreams you do not need to build the STLport library.
    1.85 +#  endif
    1.86 +#endif
    1.87 +
    1.88 +/* ========================================================= */
    1.89 +/* This file is used for compatibility; it accepts old-style config
    1.90 +   switches */
    1.91 +#include <stl/config/compat.h>
    1.92 +
    1.93 +/* Common configuration file for this particular installation. */
    1.94 +#include <stl/config/host.h>
    1.95 +
    1.96 +/* Operational Environment specific */
    1.97 +#include <stl/config/_system.h>
    1.98 +
    1.99 +/* ========================================================= */
   1.100 +
   1.101 +/* some fixes to configuration. This also includes modifications
   1.102 + * of STLport switches depending on compiler flags,
   1.103 + * or settings applicable to a group of compilers, such as
   1.104 + * to all who use EDG front-end.
   1.105 + */
   1.106 +#include <stl/config/stl_confix.h>
   1.107 +
   1.108 +#ifdef _STLP_USE_BOOST_SUPPORT
   1.109 +/* We are going to use the boost library support. To limit the problem
   1.110 + * of self referencing headers we have to specify clearly to the boost
   1.111 + * library that the Standard lib is STLport:
   1.112 + */
   1.113 +#  ifndef BOOST_STDLIB_CONFIG
   1.114 +#    define BOOST_STDLIB_CONFIG <boost/config/stdlib/stlport.hpp>
   1.115 +#  endif
   1.116 +#endif
   1.117 +
   1.118 +
   1.119 +/*
   1.120 + * Performs integrity check on user-specified parameters
   1.121 + * and site-specific settings.
   1.122 + */
   1.123 +/*
   1.124 +# include <stl/_check_config.h>
   1.125 +*/
   1.126 +
   1.127 +/* SGI terms */
   1.128 +
   1.129 +#if !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_MEMBER_TEMPLATES)
   1.130 +#  define _STLP_MEMBER_TEMPLATES 1
   1.131 +#endif
   1.132 +
   1.133 +#if !defined (_STLP_NO_FRIEND_TEMPLATES) && !defined (_STLP_FRIEND_TEMPLATES)
   1.134 +#  define _STLP_FRIEND_TEMPLATES 1
   1.135 +#endif
   1.136 +
   1.137 +#if !defined (_STLP_NO_MEMBER_TEMPLATE_CLASSES) && !defined (_STLP_MEMBER_TEMPLATE_CLASSES)
   1.138 +#  define _STLP_MEMBER_TEMPLATE_CLASSES 1
   1.139 +#endif
   1.140 +
   1.141 +#if defined (_STLP_NO_MEMBER_TEMPLATE_CLASSES) && !defined (_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE)
   1.142 +#  define _STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE 1
   1.143 +#endif
   1.144 +
   1.145 +#if !defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
   1.146 +#  define _STLP_CLASS_PARTIAL_SPECIALIZATION 1
   1.147 +#endif
   1.148 +
   1.149 +#if !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) && !defined (_STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER)
   1.150 +#  define _STLP_FUNCTION_TMPL_PARTIAL_ORDER 1
   1.151 +#endif
   1.152 +
   1.153 +#if !defined (_STLP_DONT_USE_SHORT_STRING_OPTIM) && !defined (_STLP_USE_SHORT_STRING_OPTIM)
   1.154 +#  define _STLP_USE_SHORT_STRING_OPTIM 1
   1.155 +#endif
   1.156 +
   1.157 +#if defined (_STLP_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXTENSIONS) && \
   1.158 +   !defined (_STLP_NO_CONTAINERS_EXTENSION) && !defined (_STLP_USE_CONTAINERS_EXTENSION)
   1.159 +#  define _STLP_USE_CONTAINERS_EXTENSION
   1.160 +#endif
   1.161 +
   1.162 +#if defined (_STLP_USE_CONTAINERS_EXTENSION)
   1.163 +#  define _STLP_TEMPLATE_FOR_CONT_EXT template <class _KT>
   1.164 +#else
   1.165 +#  define _STLP_TEMPLATE_FOR_CONT_EXT
   1.166 +#endif
   1.167 +
   1.168 +#if defined (_STLP_USE_PTR_SPECIALIZATIONS) && \
   1.169 +    (defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS))
   1.170 +#  error "Sorry but according the STLport settings your compiler can not support the pointer specialization feature."
   1.171 +#endif
   1.172 +
   1.173 +#if defined (_STLP_NO_IOSTREAMS) && \
   1.174 +   !defined (_STLP_USE_NEWALLOC) && !defined (_STLP_USE_MALLOC)
   1.175 +#  define _STLP_USE_NEWALLOC
   1.176 +#endif
   1.177 +
   1.178 +#if !defined (_STLP_BIG_ENDIAN) && !defined (_STLP_LITTLE_ENDIAN)
   1.179 +#  if defined (_MIPSEB) || defined (__sparc) || defined (_AIX) || \
   1.180 +      defined (__hpux) || defined (macintosh) || defined (_MAC)
   1.181 +#    define _STLP_BIG_ENDIAN 1
   1.182 +#  elif defined (__i386) || defined (_M_IX86) || defined (_M_ARM) || \
   1.183 +        defined (__amd64__) || defined (_M_AMD64) || defined (__x86_64__) || \
   1.184 +        defined (__alpha__)
   1.185 +#    define _STLP_LITTLE_ENDIAN 1
   1.186 +#  elif defined (__ia64__)
   1.187 +    /* itanium allows both settings (for instance via gcc -mbig-endian) - hence a seperate check is required */
   1.188 +#    if defined (__BIG_ENDIAN__)
   1.189 +#      define _STLP_BIG_ENDIAN 1
   1.190 +#    else
   1.191 +#      define _STLP_LITTLE_ENDIAN 1
   1.192 +#    endif
   1.193 +#  else
   1.194 +#    error "can't determine endianess"
   1.195 +#  endif
   1.196 +#endif /* _STLP_BIG_ENDIAN */
   1.197 +
   1.198 +/* ==========================================================
   1.199 + * final workaround tuning based on given flags
   1.200 + * ========================================================== */
   1.201 +
   1.202 +#ifndef _STLP_UINT32_T
   1.203 +#  define _STLP_UINT32_T unsigned long
   1.204 +#endif
   1.205 +#ifndef _STLP_ABORT
   1.206 +#  define _STLP_ABORT() abort()
   1.207 +#endif
   1.208 +
   1.209 +#if !defined (_STLP_HAS_NO_NAMESPACES)
   1.210 +#  if defined _STLP_NO_NAMESPACES
   1.211 +#    undef _STLP_USE_NAMESPACES
   1.212 +#  else
   1.213 +/* assume it as the default, turn it off later if NO_NAMESPACES selected */
   1.214 +#    undef _STLP_USE_NAMESPACES
   1.215 +#    define _STLP_USE_NAMESPACES 1
   1.216 +#  endif
   1.217 +#endif
   1.218 +
   1.219 +#if defined (_STLP_NO_IOSTREAMS)
   1.220 +#  define _STLP_USE_NO_IOSTREAMS
   1.221 +#endif
   1.222 +
   1.223 +/* Operating system recognition (basic) */
   1.224 +#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX)  || defined (__NetBSD__) || defined(__OpenBSD__) || defined (__Lynx__)
   1.225 +#  define _STLP_UNIX 1
   1.226 +#elif defined(macintosh) || defined (_MAC)
   1.227 +#  define _STLP_MAC  1
   1.228 +#elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
   1.229 +#  define _STLP_WIN32 1
   1.230 +#elif defined (__WIN16) || defined (WIN16) || defined (_WIN16)
   1.231 +#  define _STLP_WIN16
   1.232 +#endif /* __unix */
   1.233 +
   1.234 +#if defined (_STLP_WIN16)
   1.235 +#  define _STLP_LDOUBLE_80
   1.236 +#elif defined(_STLP_WIN32)
   1.237 +#  if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__) || defined (__CYGWIN__)
   1.238 +#    define _STLP_LDOUBLE_64
   1.239 +#  else
   1.240 +#    define _STLP_LDOUBLE_96
   1.241 +#  endif
   1.242 +#elif defined (_STLP_UNIX)
   1.243 +#  if defined (__CYGWIN__)
   1.244 +#    define _STLP_LDOUBLE_96
   1.245 +#  endif
   1.246 +#endif
   1.247 +
   1.248 +#if !defined (_STLP_LDOUBLE_64) && !defined (_STLP_LDOUBLE_80) && !defined (_STLP_LDOUBLE_96) && !defined (_STLP_LDOUBLE_128)
   1.249 +#  define _STLP_LDOUBLE_128
   1.250 +#endif
   1.251 +
   1.252 +#if !defined (_STLP_NO_LONG_DOUBLE)
   1.253 +#  define _STLP_LONGEST_FLOAT_TYPE long double
   1.254 +#else
   1.255 +#  define _STLP_LONGEST_FLOAT_TYPE double
   1.256 +#endif
   1.257 +
   1.258 +/* Native headers access macros */
   1.259 +#include <stl/config/_native_headers.h>
   1.260 +
   1.261 +/*  shared library tune-up */
   1.262 +
   1.263 +#if defined (__BUILDING_STLPORT)
   1.264 +/*  if we are rebuilding right now, place everything here */
   1.265 +#  undef  _STLP_DESIGNATED_DLL
   1.266 +#  define _STLP_DESIGNATED_DLL 1
   1.267 +#endif
   1.268 +
   1.269 +/* Use own namespace always if possible and not explicitly instructed otherwise */
   1.270 +#if defined (_STLP_USE_NAMESPACES) && !defined (_STLP_BROKEN_USING_DIRECTIVE) && \
   1.271 +   !defined (_STLP_NO_OWN_NAMESPACE)
   1.272 +#  undef  _STLP_USE_OWN_NAMESPACE
   1.273 +#  define _STLP_USE_OWN_NAMESPACE  1
   1.274 +#else
   1.275 +#  undef _STLP_WHOLE_NATIVE_STD
   1.276 +#endif
   1.277 +
   1.278 +#if !defined (_NOTHREADS) && !defined (_STLP_THREADS_DEFINED)
   1.279 +
   1.280 +#  if defined (_PTHREADS)
   1.281 +#    define _STLP_PTHREADS
   1.282 +#    define _STLP_THREADS
   1.283 +#  endif
   1.284 +#  if defined (_UITHREADS)
   1.285 +#    define _STLP_UITHREADS
   1.286 +#    define _STLP_THREADS
   1.287 +#  endif
   1.288 +
   1.289 +#  if defined (__sgi) && !defined (__KCC) && !defined (__GNUC__)
   1.290 +#    define _STLP_SGI_THREADS
   1.291 +#  elif defined (__DECC) || defined (__DECCXX)
   1.292 +#    define _STLP_DEC_THREADS
   1.293 +#  elif defined (_STLP_WIN32) && !defined (_STLP_PTHREADS)
   1.294 +#    define _STLP_WIN32THREADS 1
   1.295 +#  elif ((defined (__sun) && !defined (__linux__)) || defined (_UITHREADS) ) && \
   1.296 +        !defined(_STLP_PTHREADS)
   1.297 +#    define _STLP_UITHREADS
   1.298 +#  elif defined (__OS2__)
   1.299 +#    define _STLP_OS2THREADS
   1.300 +#  elif defined (__BEOS__)
   1.301 +#    define _STLP_BETHREADS
   1.302 +#  elif defined (__MWERKS__) && defined (N_PLAT_NLM) /* (__dest_os == __netware_os) */
   1.303 +#    define _STLP_NWTHREADS
   1.304 +#  else
   1.305 +#    define _STLP_PTHREADS
   1.306 +#  endif /* __sgi */
   1.307 +#  define _STLP_THREADS_DEFINED
   1.308 +#endif
   1.309 +
   1.310 +#if (defined (_REENTRANT) || defined (_THREAD_SAFE) || \
   1.311 +    (defined (_POSIX_THREADS) && defined (__OpenBSD__))) && \
   1.312 +    !defined (_STLP_THREADS)
   1.313 +#  define _STLP_THREADS
   1.314 +#endif /* _REENTRANT */
   1.315 +
   1.316 +#if defined (__linux__) && defined (_STLP_PTHREADS)
   1.317 +/* #  include <features.h> */
   1.318 +
   1.319 +#  if defined (__USE_XOPEN2K) && !defined (_STLP_DONT_USE_PTHREAD_SPINLOCK)
   1.320 +#    define _STLP_USE_PTHREAD_SPINLOCK
   1.321 +#    define _STLP_STATIC_MUTEX _STLP_mutex
   1.322 +#  endif /* __USE_XOPEN2K */
   1.323 +#endif /* __linux__ && _STLP_PTHREADS */
   1.324 +
   1.325 +#if defined (__OpenBSD__) && defined (_POSIX_THREADS) && !defined (_STLP_DONT_USE_PTHREAD_SPINLOCK)
   1.326 +#  define _STLP_USE_PTHREAD_SPINLOCK
   1.327 +#  define _STLP_STATIC_MUTEX _STLP_mutex
   1.328 +#endif
   1.329 +
   1.330 +#ifndef _STLP_STATIC_MUTEX
   1.331 +#  define _STLP_STATIC_MUTEX _STLP_mutex_base
   1.332 +#endif
   1.333 +
   1.334 +#if (defined (_MFC_VER) || defined (_AFXDLL)) && !defined (_STLP_USE_MFC)
   1.335 +#  define _STLP_USE_MFC 1
   1.336 +#endif
   1.337 +
   1.338 +#if defined (_STLP_THREADS)
   1.339 +#  define _STLP_VOLATILE volatile
   1.340 +/* windows.h _MUST be included before bool definition ;( */
   1.341 +#  if defined (_STLP_WIN32THREADS) && defined (_STLP_NO_BOOL)
   1.342 +#    undef  NOMINMAX
   1.343 +#    define NOMINMAX
   1.344 +#    ifdef _STLP_USE_MFC
   1.345 +#      include <afx.h>
   1.346 +#    else
   1.347 +#      include <windows.h>
   1.348 +#    endif
   1.349 +#    define _STLP_WINDOWS_H_INCLUDED
   1.350 +#  endif
   1.351 +#else
   1.352 +#  define _STLP_VOLATILE
   1.353 +#endif
   1.354 +
   1.355 +#if !defined (_STLP_USE_NEW_C_HEADERS) && !defined (_STLP_HAS_NO_NEW_C_HEADERS)
   1.356 +#  define _STLP_USE_NEW_C_HEADERS
   1.357 +#endif
   1.358 +/* disable new-style headers if requested */
   1.359 +#if defined (_STLP_NO_NEW_C_HEADERS)
   1.360 +#  undef _STLP_USE_NEW_C_HEADERS
   1.361 +#endif
   1.362 +
   1.363 +#if !defined (_STLP_STATIC_TEMPLATE_DATA)
   1.364 +#  define _STLP_STATIC_TEMPLATE_DATA 1
   1.365 +#endif
   1.366 +
   1.367 +#if defined (_STLP_BASE_TYPEDEF_BUG)
   1.368 +#  undef  _STLP_BASE_TYPEDEF_OUTSIDE_BUG
   1.369 +#  define _STLP_BASE_TYPEDEF_OUTSIDE_BUG 1
   1.370 +#endif
   1.371 +
   1.372 +#if defined (_STLP_NESTED_TYPE_PARAM_BUG) || (defined (_STLP_MSVC) && (_STLP_MSVC < 1100))
   1.373 +#  define _STLP_GLOBAL_NESTED_RETURN_TYPE_PARAM_BUG
   1.374 +#endif
   1.375 +
   1.376 +/* SUNpro 4.2 inline string literal bug */
   1.377 +#ifdef _STLP_INLINE_STRING_LITERAL_BUG
   1.378 +#  define _STLP_FIX_LITERAL_BUG(__x) __x = __x;
   1.379 +#else
   1.380 +#  define _STLP_FIX_LITERAL_BUG(__x)
   1.381 +#endif
   1.382 +
   1.383 +#if defined (_STLP_NON_TYPE_TMPL_PARAM_BUG)
   1.384 +#  undef  _STLP_NO_DEFAULT_NON_TYPE_PARAM
   1.385 +#  define _STLP_NO_DEFAULT_NON_TYPE_PARAM 1
   1.386 +#endif
   1.387 +
   1.388 +#define _STLP_NEW new
   1.389 +#define _STLP_PLACEMENT_NEW new
   1.390 +
   1.391 +#ifdef _STLP_DEBUG
   1.392 +#  define _STLP_ASSERTIONS 1
   1.393 +#endif
   1.394 +
   1.395 +#if !defined (_STLP_STATIC_ASSERT)
   1.396 +/* Some compiler support 0 size array so we use negative size array to generate
   1.397 + * a compilation time error.
   1.398 + */
   1.399 +#  define _STLP_STATIC_ASSERT(expr) typedef char __static_assert[expr ? 1 : -1];
   1.400 +#endif
   1.401 +
   1.402 +/* apple mpw exception handling bug */
   1.403 +#ifndef _STLP_MPWFIX_TRY
   1.404 +#  define _STLP_MPWFIX_TRY
   1.405 +#endif
   1.406 +#ifndef _STLP_MPWFIX_CATCH
   1.407 +#  define _STLP_MPWFIX_CATCH
   1.408 +#endif
   1.409 +#ifndef _STLP_MPWFIX_CATCH_ACTION
   1.410 +#  define _STLP_MPWFIX_CATCH_ACTION(action)
   1.411 +#endif
   1.412 +
   1.413 +/* if _STLP_DEBUG or _STLP_ASSERTIONS are set, stl/debug/_debug.h defines those */
   1.414 +
   1.415 +#if !defined (_STLP_ASSERTIONS) && !defined (_STLP_DEBUG) && !defined (_STLP_DEBUG_ALLOC)
   1.416 +#  define _STLP_ASSERT(expr)
   1.417 +#endif
   1.418 +
   1.419 +#if !defined (_STLP_DEBUG)
   1.420 +#  define _STLP_VERBOSE_ASSERT(expr,diagnostic)
   1.421 +#  define _STLP_DEBUG_CHECK(expr)
   1.422 +#  define _STLP_DEBUG_DO(expr)
   1.423 +#endif
   1.424 +
   1.425 +#if !defined (_STLP_WEAK)
   1.426 +#  define _STLP_WEAK
   1.427 +#endif
   1.428 +
   1.429 +/* default parameters as template types derived from arguments ( not always supported ) */
   1.430 +#if defined (_STLP_LIMITED_DEFAULT_TEMPLATES)
   1.431 +#  define _STLP_DFL_TMPL_PARAM( classname, defval ) class classname
   1.432 +#else
   1.433 +#  if !defined (_STLP_DEFAULT_TYPE_PARAM)
   1.434 +#    define _STLP_DEFAULT_TYPE_PARAM 1
   1.435 +#  endif
   1.436 +#  define _STLP_DFL_TMPL_PARAM( classname, defval ) class classname = defval
   1.437 +#endif
   1.438 +
   1.439 +/* default parameters as complete types */
   1.440 +#if defined (_STLP_DEFAULT_TYPE_PARAM)
   1.441 +#  define _STLP_DFL_TYPE_PARAM( classname, defval ) class classname = defval
   1.442 +#  define _STLP_DFL_NON_TYPE_PARAM(type,name,val) type name = val
   1.443 +#else
   1.444 +#  define _STLP_DFL_TYPE_PARAM( classname, defval ) class classname
   1.445 +#  define _STLP_DFL_NON_TYPE_PARAM(type,name,val) type name
   1.446 +#endif
   1.447 +
   1.448 +/* SGI compatibility */
   1.449 +
   1.450 +#ifdef _STLP_NO_WCHAR_T
   1.451 +#  ifndef _STLP_NO_NATIVE_WIDE_STREAMS
   1.452 +#    define  _STLP_NO_NATIVE_WIDE_STREAMS 1
   1.453 +#  endif
   1.454 +#else
   1.455 +#  define _STLP_HAS_WCHAR_T 1
   1.456 +#endif
   1.457 +
   1.458 +#if !defined (_STLP_NO_AT_MEMBER_FUNCTION)
   1.459 +#  define _STLP_CAN_THROW_RANGE_ERRORS 1
   1.460 +#endif
   1.461 +
   1.462 +#if !defined (_STLP_USE_RAW_SGI_ALLOCATORS)
   1.463 +#  define _STLP_DEFAULT_ALLOCATOR(_Tp) allocator< _Tp >
   1.464 +#  define _STLP_DEFAULT_ALLOCATOR_SELECT( _Tp ) _STLP_DFL_TMPL_PARAM(_Alloc, allocator< _Tp >)
   1.465 +#  define _STLP_DEFAULT_PAIR_ALLOCATOR(_Key, _Tp) allocator< pair < _Key, _Tp > >
   1.466 +#  if defined (_STLP_LIMITED_DEFAULT_TEMPLATES)
   1.467 +#    define _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_Key, _Tp ) class _Alloc
   1.468 +#    define _STLP_USE_WRAPPER_FOR_ALLOC_PARAM 1
   1.469 +#  else
   1.470 +#    define _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_Key, _Tp ) \
   1.471 +            class _Alloc = allocator< pair < _Key, _Tp > >
   1.472 +#  endif
   1.473 +#else
   1.474 +#  define _STLP_DEFAULT_ALLOCATOR( _Tp ) __sgi_alloc
   1.475 +#  define _STLP_DEFAULT_ALLOCATOR_SELECT( _Tp ) _STLP_DFL_TYPE_PARAM(_Alloc,__sgi_alloc)
   1.476 +#  define _STLP_DEFAULT_PAIR_ALLOCATOR( _Key, _Tp ) __sgi_alloc
   1.477 +#  define _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_Key, _Tp ) _STLP_DFL_TYPE_PARAM(_Alloc,__sgi_alloc)
   1.478 +#  if defined (_STLP_LIMITED_DEFAULT_TEMPLATES) && !defined (_STLP_DEFAULT_TYPE_PARAM)
   1.479 +#    define _STLP_USE_WRAPPER_FOR_ALLOC_PARAM 1
   1.480 +#  endif
   1.481 +#endif
   1.482 +
   1.483 +/* debug mode tool */
   1.484 +#if defined (_STLP_DEBUG)
   1.485 +#  define _STLP_NON_DBG_NAME(X) _NonDbg_##X
   1.486 +#endif
   1.487 +
   1.488 +/* pointer specialization tool */
   1.489 +#if defined (_STLP_USE_PTR_SPECIALIZATIONS)
   1.490 +#  define _STLP_PTR_IMPL_NAME(X) _Impl_##X
   1.491 +#endif
   1.492 +
   1.493 +#if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
   1.494 +#  define _STLP_NO_MEM_T_NAME(X) _NoMemT_##X
   1.495 +#  if defined (_STLP_DEBUG)
   1.496 +#    define _STLP_NON_DBG_NO_MEM_T_NAME(X) _NonDbg_NoMemT_##X
   1.497 +#  endif
   1.498 +#endif
   1.499 +
   1.500 +/* this always mean the C library is in global namespace */
   1.501 +#if defined (_STLP_HAS_NO_NEW_C_HEADERS) && !defined (_STLP_VENDOR_GLOBAL_CSTD)
   1.502 +#  define _STLP_VENDOR_GLOBAL_CSTD 1
   1.503 +#endif
   1.504 +
   1.505 +/* Depending of whether compiler supports namespaces,
   1.506 + * tune the parameters for vendor-supplied libraries.
   1.507 + * This section is guarded by _STLP_HAS_NO_NAMESPACES, not by _STLP_USE_NAMESPACES,
   1.508 + * since it depends only on the native features, not on user's preference whether
   1.509 + * to use namespace for STLport or not.
   1.510 + */
   1.511 +#if !defined (_STLP_HAS_NO_NAMESPACES)
   1.512 +/* Import some vendor's headers into corresponding STLport ones if they might be needed
   1.513 + * (if we wrap native iostreams and use namepace other than std::) */
   1.514 +#  if defined (_STLP_WHOLE_NATIVE_STD)
   1.515 +#    define  _STLP_IMPORT_VENDOR_STD 1
   1.516 +#    undef   _STLP_MINIMUM_IMPORT_STD
   1.517 +#  endif
   1.518 +
   1.519 +/* if using stlport:: namespace or if C library stuff is not in vendor's std::,
   1.520 + * try importing 'em.
   1.521 + * MSVC has ambiguity problem when we try to import C-style std:: stuff back into global namespace */
   1.522 +#  if defined (_STLP_USE_NAMESPACES) && (defined(_STLP_USE_OWN_NAMESPACE) || defined (_STLP_VENDOR_GLOBAL_CSTD))
   1.523 +#    define  _STLP_IMPORT_VENDOR_CSTD 1
   1.524 +#  endif
   1.525 +
   1.526 +#  if defined (_STLP_NO_USING_FOR_GLOBAL_FUNCTIONS) && !defined (_STLP_DO_IMPORT_CSTD_FUNCTIONS)
   1.527 +#    define _STLP_NO_CSTD_FUNCTION_IMPORTS
   1.528 +#  endif
   1.529 +
   1.530 +#  define _STLP_USING_NAMESPACE(x) using namespace x ;
   1.531 +
   1.532 +namespace std { }
   1.533 +namespace __std_alias = std;
   1.534 +
   1.535 +/* assume std:: namespace for C++ std library if not being told otherwise */
   1.536 +#  if defined (_STLP_VENDOR_GLOBAL_STD)
   1.537 +#    define _STLP_VENDOR_STD
   1.538 +#  else
   1.539 +#    define _STLP_VENDOR_STD __std_alias
   1.540 +#  endif
   1.541 +
   1.542 +/* tune things that come from C library */
   1.543 +#  if  defined (_STLP_VENDOR_GLOBAL_CSTD) || !defined(_STLP_USE_NEW_C_HEADERS)
   1.544 +/*  in old-style headers, C functions go to global scope. */
   1.545 +#    define _STLP_VENDOR_CSTD
   1.546 +#    define _STLP_USING_VENDOR_CSTD
   1.547 +#  else
   1.548 +#    define _STLP_VENDOR_CSTD  _STLP_VENDOR_STD
   1.549 +#    define _STLP_USING_VENDOR_CSTD _STLP_USING_NAMESPACE(_STLP_VENDOR_CSTD)
   1.550 +#  endif /* _STLP_VENDOR_CSTD */
   1.551 +/* exception, typeinfo, new - always come from the vendor */
   1.552 +#  if !defined (_STLP_VENDOR_EXCEPT_STD)
   1.553 +#    if defined (_STLP_VENDOR_GLOBAL_EXCEPT_STD)
   1.554 +#      define _STLP_VENDOR_EXCEPT_STD
   1.555 +#    else
   1.556 +#      define _STLP_VENDOR_EXCEPT_STD _STLP_VENDOR_STD
   1.557 +#    endif
   1.558 +#  endif
   1.559 +#  define _STLP_OLD_IO_NAMESPACE
   1.560 +#  if !defined (_STLP_VENDOR_MB_NAMESPACE)
   1.561 +#    define _STLP_VENDOR_MB_NAMESPACE _STLP_VENDOR_CSTD
   1.562 +#  endif
   1.563 +#else
   1.564 +/* compiler has no namespace support */
   1.565 +#  define _STLP_VENDOR_STD
   1.566 +#  define _STLP_VENDOR_CSTD
   1.567 +#  define _STLP_USING_NAMESPACE(x)
   1.568 +#  define _STLP_USING_VENDOR_CSTD
   1.569 +#  define _STLP_VENDOR_EXCEPT_STD
   1.570 +#endif
   1.571 +
   1.572 +#if defined (_STLP_USE_NAMESPACES)
   1.573 +
   1.574 +#  if defined (_STLP_USE_OWN_NAMESPACE)
   1.575 +#    if !defined (_STLP_STD_NAME)
   1.576 +#      if !defined (_STLP_DEBUG)
   1.577 +#        if !defined (_STLP_USING_CROSS_NATIVE_RUNTIME_LIB)
   1.578 +#          ifndef _STLP_THREADS
   1.579 +#            define _STLP_STD_NAME  stlpmtx_std
   1.580 +#          else
   1.581 +#            define _STLP_STD_NAME  stlp_std
   1.582 +#          endif
   1.583 +#        else
   1.584 +#          ifndef _STLP_THREADS
   1.585 +#            define _STLP_STD_NAME  stlpxmtx_std
   1.586 +#          else
   1.587 +#            define _STLP_STD_NAME  stlpx_std
   1.588 +#          endif
   1.589 +#        endif
   1.590 +#      else
   1.591 +/*
   1.592 + * The STLport debug mode is binary incompatible with the other modes,
   1.593 + * lets make it clear on the STLport namespace to generate link errors rather
   1.594 + * than runtime.
   1.595 + */
   1.596 +#        if !defined (_STLP_USING_CROSS_NATIVE_RUNTIME_LIB)
   1.597 +#          ifndef _STLP_THREADS
   1.598 +#            define _STLP_STD_NAME  stlpdmtx_std
   1.599 +#          else
   1.600 +#            define _STLP_STD_NAME  stlpd_std
   1.601 +#          endif
   1.602 +#        else
   1.603 +#          ifndef _STLP_THREADS
   1.604 +#            define _STLP_STD_NAME  stlpdxmtx_std
   1.605 +#          else
   1.606 +#            define _STLP_STD_NAME  stlpdx_std
   1.607 +#          endif
   1.608 +#        endif
   1.609 +#      endif
   1.610 +#    endif
   1.611 +namespace _STLP_STD_NAME { }
   1.612 +#  else
   1.613 +#    if defined (_STLP_DEBUG)
   1.614 +namespace stdD = std;
   1.615 +#    endif
   1.616 +#    define _STLP_STD_NAME std
   1.617 +#  endif /* _STLP_USE_OWN_NAMESPACE */
   1.618 +
   1.619 +#  if !defined (_STLP_USING_NAMESPACE_BUG)
   1.620 +#    define _STLP_PRIV_NAME stlp_priv
   1.621 +namespace _STLP_PRIV_NAME {
   1.622 +  using namespace _STLP_STD_NAME;
   1.623 +}
   1.624 +#  else
   1.625 +#    define _STLP_PRIV_NAME priv
   1.626 +#  endif
   1.627 +
   1.628 +#  define _STLP_BEGIN_NAMESPACE namespace _STLP_STD_NAME {
   1.629 +#  define _STLP_END_NAMESPACE }
   1.630 +
   1.631 +#  if !defined (_STLP_DONT_USE_PRIV_NAMESPACE)
   1.632 +#    if !defined (_STLP_USING_NAMESPACE_BUG)
   1.633 +/* We prefer to make private namespace a totaly seperated namespace...
   1.634 + */
   1.635 +#      define _STLP_PRIV ::_STLP_PRIV_NAME::
   1.636 +#      define _STLP_MOVE_TO_PRIV_NAMESPACE } namespace _STLP_PRIV_NAME {
   1.637 +#      define _STLP_MOVE_TO_STD_NAMESPACE } namespace _STLP_STD_NAME {
   1.638 +#    else
   1.639 +/* but sometimes we can't:
   1.640 + */
   1.641 +#      define _STLP_PRIV _STLP_PRIV_NAME::
   1.642 +#      define _STLP_MOVE_TO_PRIV_NAMESPACE namespace _STLP_PRIV_NAME {
   1.643 +#      define _STLP_MOVE_TO_STD_NAMESPACE }
   1.644 +#    endif
   1.645 +#  else
   1.646 +#    define _STLP_PRIV
   1.647 +#    define _STLP_MOVE_TO_PRIV_NAMESPACE
   1.648 +#    define _STLP_MOVE_TO_STD_NAMESPACE
   1.649 +#  endif
   1.650 +
   1.651 +/* decide whether or not we use separate namespace for rel ops */
   1.652 +#  if defined (_STLP_NO_RELOPS_NAMESPACE)
   1.653 +#    define _STLP_BEGIN_RELOPS_NAMESPACE _STLP_BEGIN_NAMESPACE namespace rel_ops {}
   1.654 +#    define _STLP_END_RELOPS_NAMESPACE }
   1.655 +#  else
   1.656 +/* Use std::rel_ops namespace */
   1.657 +#    define _STLP_BEGIN_RELOPS_NAMESPACE _STLP_BEGIN_NAMESPACE namespace rel_ops {
   1.658 +#    define _STLP_END_RELOPS_NAMESPACE } }
   1.659 +#    define _STLP_USE_SEPARATE_RELOPS_NAMESPACE
   1.660 +#  endif /* Use std::rel_ops namespace */
   1.661 +
   1.662 +#  define _STLP_STD ::_STLP_STD_NAME
   1.663 +
   1.664 +/* Official STLport namespace when std is not redefined.
   1.665 + * Here we don't use a macro as stlport is used as file name by boost
   1.666 + * and folder name under beos:
   1.667 + */
   1.668 +namespace stlport = _STLP_STD_NAME;
   1.669 +
   1.670 +/* Backward compatibility:
   1.671 + */
   1.672 +namespace _STL = _STLP_STD_NAME;
   1.673 +#undef __STLPORT_NAMESPACE
   1.674 +#define __STLPORT_NAMESPACE _STLP_STD_NAME
   1.675 +
   1.676 +#else /* _STLP_USE_NAMESPACES */
   1.677 +/* STLport is being put into global namespace */
   1.678 +#  define _STLP_STD
   1.679 +#  define _STLP_PRIV
   1.680 +#  define _STLP_BEGIN_NAMESPACE
   1.681 +#  define _STLP_END_NAMESPACE
   1.682 +#  define _STLP_MOVE_TO_PRIV_NAMESPACE
   1.683 +#  define _STLP_MOVE_TO_STD_NAMESPACE
   1.684 +
   1.685 +/* boris : it was found out that _STLP_USE_SEPARATE_RELOPS_NAMESPACE
   1.686 +   causes less problems than having relational operator templates in global namespace
   1.687 +   Please define _STLP_NO_RELOPS_NAMESPACE in stl_user_config.h if your code rely on them. */
   1.688 +#  if !defined (_STLP_NO_RELOPS_NAMESPACE)
   1.689 +#    define _STLP_USE_SEPARATE_RELOPS_NAMESPACE
   1.690 +#  endif
   1.691 +#  define _STLP_BEGIN_RELOPS_NAMESPACE
   1.692 +#  define _STLP_END_RELOPS_NAMESPACE
   1.693 +#  undef  _STLP_USE_OWN_NAMESPACE
   1.694 +#endif  /* _STLP_USE_NAMESPACES */
   1.695 +
   1.696 +#define STLPORT_CSTD _STLP_VENDOR_CSTD
   1.697 +#define STLPORT      _STLP_STD_NAME
   1.698 +
   1.699 +#if defined(_STLP_BOGUS_TEMPLATE_TYPE_MATCHING_BUG)
   1.700 +#  define _STLP_SIMPLE_TYPE(T) _stl_trivial_proxy<T>
   1.701 +#else
   1.702 +#  define _STLP_SIMPLE_TYPE(T) T
   1.703 +#endif
   1.704 +
   1.705 +#ifndef _STLP_RAND48
   1.706 +#  define _STLP_NO_DRAND48
   1.707 +#endif
   1.708 +
   1.709 +/* advanced keywords usage */
   1.710 +#define __C_CAST(__x, __y) ((__x)(__y))
   1.711 +#ifndef  _STLP_NO_NEW_STYLE_CASTS
   1.712 +#  define __CONST_CAST(__x,__y) const_cast<__x>(__y)
   1.713 +#  define __STATIC_CAST(__x,__y) static_cast<__x>(__y)
   1.714 +#  define __REINTERPRET_CAST(__x,__y) reinterpret_cast<__x>(__y)
   1.715 +#  define __DYNAMIC_CAST(__x,__y) dynamic_cast<__x>(__y)
   1.716 +#else
   1.717 +#  define __STATIC_CAST(__x,__y) __C_CAST(__x, __y)
   1.718 +#  define __CONST_CAST(__x,__y) __C_CAST(__x, __y)
   1.719 +#  define __REINTERPRET_CAST(__x,__y) __C_CAST(__x, __y)
   1.720 +#  define __DYNAMIC_CAST(__x,__y) __C_CAST(__x, __y)
   1.721 +#endif
   1.722 +
   1.723 +#if defined (_STLP_NEED_TYPENAME) && ! defined (typename)
   1.724 +#  define typename
   1.725 +#endif
   1.726 +
   1.727 +#if defined (_STLP_NEED_TYPENAME) || defined (_STLP_NO_TYPENAME_ON_RETURN_TYPE )
   1.728 +#  define _STLP_TYPENAME_ON_RETURN_TYPE
   1.729 +#else
   1.730 +#  define _STLP_TYPENAME_ON_RETURN_TYPE typename
   1.731 +#endif
   1.732 +
   1.733 +#ifdef _STLP_NO_TYPENAME_IN_TEMPLATE_HEADER
   1.734 +#  define _STLP_HEADER_TYPENAME
   1.735 +#else
   1.736 +#  define _STLP_HEADER_TYPENAME typename
   1.737 +#endif
   1.738 +
   1.739 +#ifndef _STLP_NO_MEMBER_TEMPLATE_KEYWORD
   1.740 +#  define _STLP_TEMPLATE template
   1.741 +#else
   1.742 +#  define _STLP_TEMPLATE
   1.743 +#endif
   1.744 +
   1.745 +#if defined (_STLP_USE_CONTAINERS_EXTENSION)
   1.746 +#  define _STLP_KEY_TYPE_FOR_CONT_EXT(type)
   1.747 +#  define _STLP_TEMPLATE_FOR_CONT_EXT template <class _KT>
   1.748 +#else
   1.749 +#  define _STLP_KEY_TYPE_FOR_CONT_EXT(type) typedef type _KT;
   1.750 +#  define _STLP_TEMPLATE_FOR_CONT_EXT
   1.751 +#endif
   1.752 +
   1.753 +#if defined (_STLP_NEED_EXPLICIT) && !defined (explicit)
   1.754 +#  define explicit
   1.755 +#endif
   1.756 +
   1.757 +#if !defined (_STLP_NEED_MUTABLE)
   1.758 +#  define _STLP_ASSIGN_MUTABLE(type,x,y) x = y
   1.759 +#else
   1.760 +#  define _STLP_ASSIGN_MUTABLE(type,x,y) __CONST_CAST(type,x)=y
   1.761 +#  define mutable
   1.762 +#endif
   1.763 +
   1.764 +#if defined (_STLP_NO_SIGNED_BUILTINS)
   1.765 +/* old HP-UX doesn't understand "signed" keyword */
   1.766 +#  define signed
   1.767 +#endif
   1.768 +
   1.769 +#if defined (_STLP_LOOP_INLINE_PROBLEMS)
   1.770 +#  define _STLP_INLINE_LOOP
   1.771 +#else
   1.772 +#  define _STLP_INLINE_LOOP inline
   1.773 +#endif
   1.774 +
   1.775 +#define _STLP_PRIVATE public
   1.776 +
   1.777 +#ifndef _STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX
   1.778 +#  define _STLP_TEMPLATE_NULL template<>
   1.779 +#else
   1.780 +#  define _STLP_TEMPLATE_NULL
   1.781 +#endif
   1.782 +
   1.783 +#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDER
   1.784 +#  define _STLP_OPERATOR_TEMPLATE
   1.785 +#else
   1.786 +#  define _STLP_OPERATOR_TEMPLATE _STLP_TEMPLATE_NULL
   1.787 +#endif
   1.788 +
   1.789 +#ifndef _STLP_CLASS_PARTIAL_SPECIALIZATION
   1.790 +/* unless we have other compiler problem, try simulating partial spec here */
   1.791 +#  if !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)
   1.792 +#    define _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS
   1.793 +#  endif
   1.794 +/* For your own iterators, please use inheritance from iterator<> instead of these obsolete queries. */
   1.795 +#  if  (defined (_STLP_NESTED_TYPE_PARAM_BUG) || !defined (_STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS))
   1.796 +#    if ! defined ( _STLP_USE_OLD_HP_ITERATOR_QUERIES )
   1.797 +#      define _STLP_USE_OLD_HP_ITERATOR_QUERIES
   1.798 +#    endif
   1.799 +#  elif defined ( _STLP_NO_ANACHRONISMS )
   1.800 +#    undef _STLP_USE_OLD_HP_ITERATOR_QUERIES
   1.801 +#  endif
   1.802 +#endif
   1.803 +
   1.804 +#ifndef _STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS
   1.805 +#  define _STLP_NULL_TMPL_ARGS <>
   1.806 +# else
   1.807 +#  define _STLP_NULL_TMPL_ARGS
   1.808 +#endif
   1.809 +
   1.810 +#if !defined (_STLP_ALLOCATOR_TYPE_DFL)
   1.811 +#  if defined (_STLP_DONT_SUP_DFLT_PARAM)
   1.812 +#    define _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS
   1.813 +#  endif
   1.814 +#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
   1.815 +#    define _STLP_ALLOCATOR_TYPE_DFL
   1.816 +#  else
   1.817 +#    define _STLP_ALLOCATOR_TYPE_DFL = allocator_type()
   1.818 +#  endif
   1.819 +#endif
   1.820 +
   1.821 +/* When the compiler do not correctly initialized the basic types value in default parameters we prefer
   1.822 + * to avoid them to be able to correct this bug.
   1.823 + */
   1.824 +#if defined (_STLP_DEF_CONST_DEF_PARAM_BUG)
   1.825 +#  define _STLP_DONT_SUP_DFLT_PARAM 1
   1.826 +#endif
   1.827 +
   1.828 +#if defined (__SGI_STL_NO_ARROW_OPERATOR) && ! defined (_STLP_NO_ARROW_OPERATOR)
   1.829 +#  define _STLP_NO_ARROW_OPERATOR
   1.830 +#endif
   1.831 +
   1.832 +#if !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
   1.833 +#  if !(defined (_STLP_NO_ARROW_OPERATOR)) && \
   1.834 +       !defined (_STLP_NO_MSVC50_COMPATIBILITY) && !defined (_STLP_MSVC50_COMPATIBILITY)
   1.835 +/* this one is needed for proper reverse_iterator<> operator ->() handling */
   1.836 +#    define _STLP_MSVC50_COMPATIBILITY 1
   1.837 +#  endif
   1.838 +#endif
   1.839 +
   1.840 +#if defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION )
   1.841 +#  if (defined(__IBMCPP__) && (500 <= __IBMCPP__) && (__IBMCPP__ < 600) )
   1.842 +#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
   1.843 +   typedef typename _STLP_STD :: reverse_iterator<const_iterator> const_reverse_iterator; \
   1.844 +   typedef typename _STLP_STD :: reverse_iterator<iterator> reverse_iterator
   1.845 +#  elif (defined (__sgi) && ! defined (__GNUC__)) || defined (__SUNPRO_CC) || defined (__xlC__)
   1.846 +#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
   1.847 +   typedef _STLP_STD:: _STLP_TEMPLATE reverse_iterator<const_iterator> const_reverse_iterator; \
   1.848 +   typedef _STLP_STD:: _STLP_TEMPLATE reverse_iterator<iterator> reverse_iterator
   1.849 +#  else
   1.850 +#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
   1.851 +   typedef _STLP_STD::reverse_iterator<const_iterator> const_reverse_iterator; \
   1.852 +   typedef _STLP_STD::reverse_iterator<iterator> reverse_iterator
   1.853 +#  endif
   1.854 +#else /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
   1.855 +#  if defined (_STLP_MSVC50_COMPATIBILITY)
   1.856 +#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
   1.857 +  typedef _STLP_STD::__reverse_iterator<const_iterator, value_type, const_reference, \
   1.858 +    const_pointer, difference_type>  const_reverse_iterator; \
   1.859 +  typedef _STLP_STD::__reverse_iterator<iterator, value_type, reference, pointer, difference_type> \
   1.860 +    reverse_iterator
   1.861 +#  else
   1.862 +#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
   1.863 +  typedef _STLP_STD::__reverse_iterator<const_iterator, value_type, const_reference, \
   1.864 +    difference_type>  const_reverse_iterator; \
   1.865 +  typedef _STLP_STD::__reverse_iterator<iterator, value_type, \
   1.866 +    reference, difference_type> \
   1.867 +    reverse_iterator
   1.868 +#  endif
   1.869 +#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
   1.870 +
   1.871 +#define _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS \
   1.872 +        _STLP_DECLARE_REVERSE_ITERATORS(reverse_bidirectional_iterator)
   1.873 +#define _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS \
   1.874 +        _STLP_DECLARE_REVERSE_ITERATORS(reverse_iterator)
   1.875 +
   1.876 +#define __IMPORT_CONTAINER_TYPEDEFS(_Super)                              \
   1.877 +    typedef typename _Super::value_type value_type;                      \
   1.878 +    typedef typename _Super::size_type size_type;                        \
   1.879 +    typedef typename _Super::difference_type difference_type;            \
   1.880 +    typedef typename _Super::reference reference;                        \
   1.881 +    typedef typename _Super::const_reference const_reference;            \
   1.882 +    typedef typename _Super::pointer pointer;                            \
   1.883 +    typedef typename _Super::const_pointer const_pointer;                \
   1.884 +    typedef typename _Super::allocator_type allocator_type;
   1.885 +
   1.886 +
   1.887 +#define __IMPORT_ITERATORS(_Super)                                       \
   1.888 +    typedef typename _Super::iterator iterator;                          \
   1.889 +    typedef typename _Super::const_iterator const_iterator;
   1.890 +
   1.891 +#define __IMPORT_REVERSE_ITERATORS(_Super)                                   \
   1.892 +    typedef typename _Super::const_reverse_iterator  const_reverse_iterator; \
   1.893 +    typedef typename _Super::reverse_iterator reverse_iterator;
   1.894 +
   1.895 +#define  __IMPORT_SUPER_COPY_ASSIGNMENT(__derived_name, _Self, _SUPER)       \
   1.896 +    __derived_name(const _Super& __x) : _SUPER(__x) {}                       \
   1.897 +    _Self& operator=(const _Super& __x) {                                    \
   1.898 +        *(_Super*)this = __x;                                                \
   1.899 +        return *this;                                                        \
   1.900 +    }                                                                        \
   1.901 +    __derived_name(const _Self& __x) : _SUPER(__x) {}                        \
   1.902 +    _Self& operator=(const _Self& __x) {                                     \
   1.903 +        *(_Super*)this = __x;                                                \
   1.904 +        return *this;                                                        \
   1.905 +    }
   1.906 +
   1.907 +#define __IMPORT_WITH_ITERATORS(_Super) \
   1.908 +  __IMPORT_CONTAINER_TYPEDEFS(_Super) __IMPORT_ITERATORS(_Super)
   1.909 +
   1.910 +#define __IMPORT_WITH_REVERSE_ITERATORS(_Super) \
   1.911 +  __IMPORT_WITH_ITERATORS(_Super) __IMPORT_REVERSE_ITERATORS(_Super)
   1.912 +
   1.913 +#if defined (_STLP_TRIVIAL_CONSTRUCTOR_BUG)
   1.914 +#  define __TRIVIAL_CONSTRUCTOR(__type) __type() {}
   1.915 +#else
   1.916 +#  define __TRIVIAL_CONSTRUCTOR(__type)
   1.917 +#endif
   1.918 +
   1.919 +#if defined (_STLP_TRIVIAL_DESTRUCTOR_BUG)
   1.920 +#  define __TRIVIAL_DESTRUCTOR(__type) ~__type() {}
   1.921 +#else
   1.922 +#  define __TRIVIAL_DESTRUCTOR(__type)
   1.923 +#endif
   1.924 +
   1.925 +#define __TRIVIAL_STUFF(__type)  \
   1.926 +  __TRIVIAL_CONSTRUCTOR(__type) __TRIVIAL_DESTRUCTOR(__type)
   1.927 +
   1.928 +#if defined (_STLP_HAS_NO_EXCEPTIONS)
   1.929 +#  define _STLP_NO_EXCEPTIONS
   1.930 +#endif
   1.931 +
   1.932 +#if !defined (_STLP_DONT_USE_EXCEPTIONS) && !defined (_STLP_NO_EXCEPTIONS) && !defined (_STLP_USE_EXCEPTIONS)
   1.933 +#  define _STLP_USE_EXCEPTIONS
   1.934 +#endif
   1.935 +
   1.936 +#if defined (_STLP_USE_EXCEPTIONS)
   1.937 +#  define _STLP_TRY try
   1.938 +#  define _STLP_CATCH_ALL catch(...)
   1.939 +#  ifndef _STLP_THROW
   1.940 +#    define _STLP_THROW(x) throw x
   1.941 +#  endif
   1.942 +#  define _STLP_RETHROW throw
   1.943 +
   1.944 +#  define _STLP_UNWIND(action) catch(...) { action; throw; }
   1.945 +
   1.946 +#  ifdef _STLP_THROW_RETURN_BUG
   1.947 +#    define _STLP_RET_AFTER_THROW(data) return data;
   1.948 +#  else
   1.949 +#    define _STLP_RET_AFTER_THROW(data)
   1.950 +#  endif
   1.951 +
   1.952 +/* We do not use exception throw specifications unless we are forced to */
   1.953 +#  if !defined (_STLP_THROWS)
   1.954 +#    define _STLP_THROWS(x)
   1.955 +#  endif
   1.956 +#  if !defined (_STLP_NOTHROW)
   1.957 +#    define _STLP_NOTHROW
   1.958 +#  endif
   1.959 +#else
   1.960 +#  define _STLP_TRY
   1.961 +#  define _STLP_CATCH_ALL if (false)
   1.962 +#  ifndef _STLP_THROW
   1.963 +#    define _STLP_THROW(x)
   1.964 +#  endif
   1.965 +#  define _STLP_RETHROW {}
   1.966 +#  define _STLP_UNWIND(action)
   1.967 +#  define _STLP_THROWS(x)
   1.968 +#  define _STLP_NOTHROW
   1.969 +#  define _STLP_RET_AFTER_THROW(data)
   1.970 +#endif
   1.971 +
   1.972 +/*
   1.973 + * Here we check _STLP_NO_EXCEPTIONS which means that the compiler has no
   1.974 + * exception support but not the _STLP_USE_EXCEPTIONS which simply means
   1.975 + * that the user do not want to use them.
   1.976 + */
   1.977 +#if !defined (_STLP_NO_EXCEPTIONS) && !defined (_STLP_NO_EXCEPTION_SPEC)
   1.978 +#  define _STLP_THROWS_INHERENTLY(x) throw x
   1.979 +#  define _STLP_NOTHROW_INHERENTLY throw()
   1.980 +#else
   1.981 +#  define _STLP_THROWS_INHERENTLY(x)
   1.982 +#  define _STLP_NOTHROW_INHERENTLY
   1.983 +#endif
   1.984 +
   1.985 +/* STLport function not returning are functions that throw so we translate
   1.986 + * the noreturn functions in throwing functions taking also into account
   1.987 + * exception support activation.
   1.988 + */
   1.989 +#if defined (_STLP_NORETURN_FUNCTION) && !defined (_STLP_NO_EXCEPTIONS) && \
   1.990 +   !defined (_STLP_FUNCTION_THROWS)
   1.991 +#  define _STLP_FUNCTION_THROWS _STLP_NORETURN_FUNCTION
   1.992 +#else
   1.993 +#  define _STLP_FUNCTION_THROWS
   1.994 +#endif
   1.995 +
   1.996 +#if defined(_STLP_NO_BOOL)
   1.997 +#  if (defined (__IBMCPP__) && (__IBMCPP__ < 400)) && ! defined (_AIX)
   1.998 +#    include <isynonym.hpp>
   1.999 +#    if defined (__OS400__)
  1.1000 +typedef int bool;
  1.1001 +#    elif !( defined (__xlC__) || defined (_AIX))
  1.1002 +typedef Boolean bool;
  1.1003 +#    endif
  1.1004 +#  else
  1.1005 +#    if defined(_STLP_YVALS_H)
  1.1006 +#      include <yvals.h>
  1.1007 +#    else
  1.1008 +#      if defined (_STLP_DONT_USE_BOOL_TYPEDEF)
  1.1009 +#        define bool int
  1.1010 +#      else
  1.1011 +typedef int bool;
  1.1012 +#      endif
  1.1013 +#      define true 1
  1.1014 +#      define false 0
  1.1015 +#    endif
  1.1016 +#  endif /* __IBMCPP__ */
  1.1017 +#else
  1.1018 +#  define _STLP_BOOL_KEYWORD 1
  1.1019 +#endif /* _STLP_NO_BOOL */
  1.1020 +
  1.1021 +#ifndef _STLP_MPW_EXTRA_CONST
  1.1022 +#  define _STLP_MPW_EXTRA_CONST
  1.1023 +#endif
  1.1024 +
  1.1025 +#ifndef _STLP_DEFAULTCHAR
  1.1026 +#  define _STLP_DEFAULTCHAR char
  1.1027 +#endif
  1.1028 +
  1.1029 +#if defined (_STLP_DEBUG_ALLOC) && !defined (_STLP_ASSERTIONS)
  1.1030 +#  define _STLP_ASSERTIONS 1
  1.1031 +#endif
  1.1032 +
  1.1033 +/* uninitialized value filler */
  1.1034 +#ifndef _STLP_SHRED_BYTE
  1.1035 +/* This value is designed to cause problems if an error occurs */
  1.1036 +#  define _STLP_SHRED_BYTE 0xA3
  1.1037 +#endif /* _STLP_SHRED_BYTE */
  1.1038 +
  1.1039 +/* shared library tune-up */
  1.1040 +#ifndef _STLP_IMPORT_DECLSPEC
  1.1041 +#  define _STLP_IMPORT_DECLSPEC
  1.1042 +#endif
  1.1043 +
  1.1044 +/* a keyword used to instantiate export template */
  1.1045 +#ifndef _STLP_EXPORT_TEMPLATE_KEYWORD
  1.1046 +#  define _STLP_EXPORT_TEMPLATE_KEYWORD
  1.1047 +#endif
  1.1048 +#ifndef _STLP_IMPORT_TEMPLATE_KEYWORD
  1.1049 +#  define _STLP_IMPORT_TEMPLATE_KEYWORD
  1.1050 +#endif
  1.1051 +
  1.1052 +#ifdef _STLP_USE_NO_IOSTREAMS
  1.1053 +/*
  1.1054 + * If we do not use iostreams we do not use the export/import
  1.1055 + * techniques to avoid build of the STLport library.
  1.1056 + */
  1.1057 +#  undef _STLP_USE_DECLSPEC
  1.1058 +/* We also undef USE_DYNAMIC_LIB macro as this macro add some code
  1.1059 + * to use the dynamic (shared) STLport library for some platform/compiler
  1.1060 + * configuration leading to problem when do not link to the STLport lib.
  1.1061 + */
  1.1062 +#  undef _STLP_USE_DYNAMIC_LIB
  1.1063 +#endif
  1.1064 +
  1.1065 +#if  defined (_STLP_DLLEXPORT_NEEDS_PREDECLARATION) && defined (_STLP_USE_DECLSPEC)
  1.1066 +#  if ! defined (_STLP_USE_TEMPLATE_EXPORT)
  1.1067 +/* this setting turns on "extern template" extension use */
  1.1068 +#    define _STLP_USE_TEMPLATE_EXPORT
  1.1069 +#  endif
  1.1070 +#  if defined (_STLP_DESIGNATED_DLL) && ! defined (_STLP_NO_FORCE_INSTANTIATE)
  1.1071 +#    define _STLP_NO_FORCE_INSTANTIATE
  1.1072 +#  endif
  1.1073 +#endif
  1.1074 +
  1.1075 +#if defined (_STLP_DESIGNATED_DLL) /* This is a lib which will contain STLport exports */
  1.1076 +#  define  _STLP_EXPORT _STLP_EXPORT_TEMPLATE_KEYWORD
  1.1077 +#else
  1.1078 +#  define  _STLP_EXPORT _STLP_IMPORT_TEMPLATE_KEYWORD
  1.1079 +#endif
  1.1080 +
  1.1081 +#ifndef _STLP_EXPORT_TEMPLATE
  1.1082 +#  define  _STLP_EXPORT_TEMPLATE _STLP_EXPORT template
  1.1083 +#endif
  1.1084 +
  1.1085 +#if defined (_STLP_USE_DECLSPEC) /* using export/import technique */
  1.1086 +
  1.1087 +#  ifndef _STLP_EXPORT_DECLSPEC
  1.1088 +#    define _STLP_EXPORT_DECLSPEC
  1.1089 +#  endif
  1.1090 +#  ifndef _STLP_IMPORT_DECLSPEC
  1.1091 +#    define _STLP_IMPORT_DECLSPEC
  1.1092 +#  endif
  1.1093 +#  ifndef _STLP_CLASS_EXPORT_DECLSPEC
  1.1094 +#    define _STLP_CLASS_EXPORT_DECLSPEC
  1.1095 +#  endif
  1.1096 +#  ifndef _STLP_CLASS_IMPORT_DECLSPEC
  1.1097 +#    define _STLP_CLASS_IMPORT_DECLSPEC
  1.1098 +#  endif
  1.1099 +#  if defined (_STLP_DESIGNATED_DLL) /* This is a lib which will contain STLport exports */
  1.1100 +#    define  _STLP_DECLSPEC        _STLP_EXPORT_DECLSPEC
  1.1101 +#    define  _STLP_CLASS_DECLSPEC  _STLP_CLASS_EXPORT_DECLSPEC
  1.1102 +#  else
  1.1103 +#    define  _STLP_DECLSPEC        _STLP_IMPORT_DECLSPEC   /* Other modules, importing STLport exports */
  1.1104 +#    define  _STLP_CLASS_DECLSPEC  _STLP_CLASS_IMPORT_DECLSPEC
  1.1105 +#  endif
  1.1106 +
  1.1107 +#else /* Not using DLL export/import specifications */
  1.1108 +
  1.1109 +#  define _STLP_DECLSPEC
  1.1110 +#  define _STLP_CLASS_DECLSPEC
  1.1111 +
  1.1112 +#endif
  1.1113 +
  1.1114 +#define _STLP_EXPORT_TEMPLATE_CLASS _STLP_EXPORT template class _STLP_CLASS_DECLSPEC
  1.1115 +
  1.1116 +#if defined (_STLP_MSVC) || defined (__ICL)
  1.1117 +#  define _STLP_STATIC_MEMBER_DECLSPEC
  1.1118 +#else
  1.1119 +#  define _STLP_STATIC_MEMBER_DECLSPEC _STLP_DECLSPEC
  1.1120 +#endif
  1.1121 +
  1.1122 +#if !defined (_STLP_CALL)
  1.1123 +#  define _STLP_CALL
  1.1124 +#endif
  1.1125 +
  1.1126 +#ifndef _STLP_USE_NO_IOSTREAMS
  1.1127 +
  1.1128 +#  if defined (__DECCXX) && ! defined (__USE_STD_IOSTREAM)
  1.1129 +#    define __USE_STD_IOSTREAM
  1.1130 +#  endif
  1.1131 +
  1.1132 +/* We only need to expose details of streams implementation
  1.1133 +   if we use non-standard i/o or are building STLport*/
  1.1134 +#  if defined (__BUILDING_STLPORT) || defined (_STLP_NO_FORCE_INSTANTIATE) || !defined(_STLP_NO_CUSTOM_IO)
  1.1135 +#    define _STLP_EXPOSE_STREAM_IMPLEMENTATION 1
  1.1136 +#  endif
  1.1137 +
  1.1138 +/* We only need to expose details of global implementation if we are building STLport
  1.1139 +   or have not instantiated everything in the lib */
  1.1140 +#  if defined (__BUILDING_STLPORT) || defined (_STLP_NO_FORCE_INSTANTIATE)
  1.1141 +#    undef  _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
  1.1142 +#    define _STLP_EXPOSE_GLOBALS_IMPLEMENTATION 1
  1.1143 +#  endif
  1.1144 +
  1.1145 +#else /* _STLP_USE_NO_IOSTREAMS */
  1.1146 +/* when we are not using SGI iostreams, we must expose globals, but not streams implementation */
  1.1147 +#  define _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
  1.1148 +#endif /* _STLP_USE_NO_IOSTREAMS */
  1.1149 +
  1.1150 +#ifdef _STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS
  1.1151 +#  define _STLP_PSPEC2(t1,t2) < t1,t2 >
  1.1152 +#  define _STLP_PSPEC3(t1,t2,t3) < t1,t2,t3 >
  1.1153 +#else
  1.1154 +#  define _STLP_PSPEC2(t1,t2)  /* nothing */
  1.1155 +#  define _STLP_PSPEC3(t1,t2,t3)  /* nothing */
  1.1156 +#endif
  1.1157 +
  1.1158 +/* Activation of the partial template workaround:
  1.1159 + */
  1.1160 +#if !defined(_STLP_DONT_USE_PARTIAL_SPEC_WRKD) &&\
  1.1161 +   (!defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || !defined(_STLP_FUNCTION_TMPL_PARTIAL_ORDER))
  1.1162 +#  define _STLP_USE_PARTIAL_SPEC_WORKAROUND
  1.1163 +#endif
  1.1164 +
  1.1165 +#ifndef _STLP_USE_NO_IOSTREAMS
  1.1166 +#  define _STLP_NEW_IO_NAMESPACE _STLP_STD
  1.1167 +#  define _STLP_NO_WIDE_STREAMS  _STLP_NO_WCHAR_T
  1.1168 +#endif
  1.1169 +
  1.1170 +#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
  1.1171 +#  define _STLP_RELOPS_OPERATORS(_TMPL, _TP) \
  1.1172 +_TMPL inline bool _STLP_CALL operator!=(const _TP& __x, const _TP& __y) {return !(__x == __y);}\
  1.1173 +_TMPL inline bool _STLP_CALL operator>(const _TP& __x, const _TP& __y)  {return __y < __x;}\
  1.1174 +_TMPL inline bool _STLP_CALL operator<=(const _TP& __x, const _TP& __y) { return !(__y < __x);}\
  1.1175 +_TMPL inline bool _STLP_CALL operator>=(const _TP& __x, const _TP& __y) { return !(__x < __y);}
  1.1176 +#else
  1.1177 +#  define _STLP_RELOPS_OPERATORS(_TMPL, _TP)
  1.1178 +#endif
  1.1179 +
  1.1180 +#if defined ( _STLP_USE_ABBREVS )
  1.1181 +#  include <stl/_abbrevs.h>
  1.1182 +#endif
  1.1183 +
  1.1184 +/* A really useful macro */
  1.1185 +#define _STLP_ARRAY_SIZE(A) sizeof(A) / sizeof(A[0])
  1.1186 +#define _STLP_ARRAY_AND_SIZE(A) A, sizeof(A) / sizeof(A[0])
  1.1187 +
  1.1188 +/* some cleanup */
  1.1189 +#undef _STLP_DONT_USE_BOOL_TYPEDEF
  1.1190 +#undef _STLP_YVALS_H
  1.1191 +#undef _STLP_LOOP_INLINE_PROBLEMS
  1.1192 +#undef _STLP_NEED_EXPLICIT
  1.1193 +#undef _STLP_NEED_TYPENAME
  1.1194 +#undef _STLP_NO_NEW_STYLE_CASTS
  1.1195 +#undef __AUTO_CONFIGURED
  1.1196 +
  1.1197 +#endif /* _STLP_FEATURES_H */