features.h revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Copyright (c) 1994
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Hewlett-Packard Company
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Copyright (c) 1996,1997
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Silicon Graphics Computer Systems, Inc.
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Copyright (c) 1997
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Moscow Center for SPARC Technology
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Copyright (c) 1999
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Boris Fomitchev
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * This material is provided "as is", with absolutely no warranty expressed
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * or implied. Any use is at your own risk.
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Permission to use or copy this software for any purpose is hereby granted
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * without fee, provided the above notices are retained on all copies.
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * Permission to modify the code and to distribute modified code is granted,
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * provided the above notices are retained, and a notice that the code was
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  * modified is included with the above copyright notice.
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  *
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  */
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_FEATURES_H
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_FEATURES_H
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Purpose of this file:
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Defines all STLport settings.
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This file is actually a wrapper : it includes compiler-specific
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * settings from <config/stlcomp.h>
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * and user-defined settings from <config/user_config.h>.
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * See <config/stl_mycomp.h> and <config/user_config.h> for the description
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * of those macros
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Definition of the STLport version informations */
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_stlport_version.h>
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Other macros defined by this file:
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * bool, true, and false, if _STLP_NO_BOOL is defined.
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * typename, as a null macro if it's not already a keyword.
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * explicit, as a null macro if it's not already a keyword.
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * namespace-related macros (_STLP_STD, _STLP_BEGIN_NAMESPACE, etc.)
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * exception-related macros (_STLP_TRY, _STLP_UNWIND, etc.)
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * _STLP_ASSERT, either as a test or as a null macro, depending on
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   whether or not _STLP_ASSERTIONS is defined.
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Definition of the 2 STLport debug levels */
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_STLPORT_DBG_LEVEL 1
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_STANDARD_DBG_LEVEL 2
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Placeholder for user to override settings.
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * It could be also used to mask settings from
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * different directories.
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/config/user_config.h>
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG) && !defined (_STLP_DEBUG_LEVEL)
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEBUG_LEVEL _STLP_STLPORT_DBG_LEVEL
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__BUILDING_STLPORT)
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* For the STLport implementation we can use everything:
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NO_ANACHRONISMS)
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _STLP_NO_ANACHRONISMS
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NO_EXTENSIONS)
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _STLP_NO_EXTENSIONS
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Moreover there are things that have no sens:
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NO_IOSTREAMS)
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    error If you do not use iostreams you do not need to build the STLport library.
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* ========================================================= */
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This file is used for compatibility; it accepts old-style config
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   switches */
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/config/compat.h>
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Common configuration file for this particular installation. */
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/config/host.h>
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Operational Environment specific */
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/config/_system.h>
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* ========================================================= */
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* some fixes to configuration. This also includes modifications
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * of STLport switches depending on compiler flags,
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or settings applicable to a group of compilers, such as
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * to all who use EDG front-end.
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/config/stl_confix.h>
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_MEMBER_TEMPLATES)
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MEMBER_TEMPLATES 1
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_MEMBER_TEMPLATE_CLASSES) && !defined (_STLP_MEMBER_TEMPLATE_CLASSES)
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MEMBER_TEMPLATE_CLASSES 1
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_MEMBER_TEMPLATE_CLASSES) && !defined (_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE)
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE 1
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CLASS_PARTIAL_SPECIALIZATION 1
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) && !defined (_STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER)
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_FUNCTION_TMPL_PARTIAL_ORDER 1
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_USE_SHORT_STRING_OPTIM) && !defined (_STLP_USE_SHORT_STRING_OPTIM)
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_SHORT_STRING_OPTIM 1
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXTENSIONS) && \
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   !defined (_STLP_NO_CONTAINERS_EXTENSION) && !defined (_STLP_USE_CONTAINERS_EXTENSION)
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_CONTAINERS_EXTENSION
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_CONTAINERS_EXTENSION)
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_FOR_CONT_EXT template <class _KT>
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_FOR_CONT_EXT
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) && \
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    (defined (_STLP_NO_CLASS_PARTIAL_SPECIALIZATION) && defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS))
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  error Sorry but according the STLport settings your compiler can not support the pointer specialization feature.
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_WHOLE_NATIVE_STD) && defined (_STLP_NO_OWN_NAMESPACE)
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  error Sorry but asking for both STLport to be in the real std namespace and also having STLport import all native std stuff \
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  is invalid, chose one or none.
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_VERBOSE) && !defined (_STLP_VERBOSE_MODE_SUPPORTED)
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  error Sorry but the verbose mode is not implemented for your compiler.
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_IOSTREAMS) && \
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   !defined (_STLP_USE_NEWALLOC) && !defined (_STLP_USE_MALLOC)
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_NEWALLOC
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_BIG_ENDIAN) && !defined (_STLP_LITTLE_ENDIAN)
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_MIPSEB) || defined (__sparc) || defined (_AIX) || \
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      defined (__hpux) || defined (macintosh) || defined (_MAC)
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_BIG_ENDIAN 1
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif defined (__i386) || defined (_M_IX86) || defined (_M_ARM) || \
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        defined (__amd64__) || defined (_M_AMD64) || defined (__x86_64__) || \
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        defined (__alpha__)
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_LITTLE_ENDIAN 1
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif defined (__ia64__)
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    /* itanium allows both settings (for instance via gcc -mbig-endian) - hence a seperate check is required */
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined (__BIG_ENDIAN__)
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_BIG_ENDIAN 1
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_LITTLE_ENDIAN 1
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    error "can't determine endianess"
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_BIG_ENDIAN */
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* ==========================================================
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * final workaround tuning based on given flags
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * ========================================================== */
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_UINT32_T
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_UINT32_T unsigned long
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_ABORT
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_ABORT() abort()
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_HAS_NO_NAMESPACES)
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined _STLP_NO_NAMESPACES
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _STLP_USE_NAMESPACES
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* assume it as the default, turn it off later if NO_NAMESPACES selected */
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _STLP_USE_NAMESPACES
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USE_NAMESPACES 1
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_IOSTREAMS)
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_NO_IOSTREAMS
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Operating system recognition (basic) */
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (defined(__unix) || defined(__linux__) || defined(__QNX__) || defined(_AIX)  || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__Lynx__) || defined(__hpux) || defined(__sgi)) && \
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott     !defined (_STLP_UNIX)
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_UNIX 1
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* __unix */
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_LONG_DOUBLE)
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_LONGEST_FLOAT_TYPE long double
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_LONGEST_FLOAT_TYPE double
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Native headers access macros */
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_HAS_INCLUDE_NEXT)
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <stl/config/_native_headers.h>
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*  shared library tune-up */
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__BUILDING_STLPORT)
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*  if we are rebuilding right now, place everything here */
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef  _STLP_DESIGNATED_DLL
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DESIGNATED_DLL 1
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Use own namespace always if possible and not explicitly instructed otherwise */
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_NAMESPACES) && !defined (_STLP_BROKEN_USING_DIRECTIVE) && \
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   !defined (_STLP_NO_OWN_NAMESPACE)
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef  _STLP_USE_OWN_NAMESPACE
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_OWN_NAMESPACE  1
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_WHOLE_NATIVE_STD
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_NOTHREADS) && !defined (_STLP_THREADS_DEFINED)
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_PTHREADS)
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_PTHREADS
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_THREADS
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_UITHREADS)
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_UITHREADS
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_THREADS
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_WIN32) && !defined (_STLP_PTHREADS)
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_WIN32THREADS 1
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif ((defined (__sun) && !defined (__linux__)) || defined (_UITHREADS) ) && \
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        !defined(_STLP_PTHREADS)
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_UITHREADS
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_PTHREADS
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* __sgi */
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THREADS_DEFINED
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (defined (_REENTRANT) || defined (_THREAD_SAFE)) && !defined (_STLP_THREADS)
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THREADS
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_STATIC_MUTEX
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_STATIC_MUTEX _STLP_mutex_base
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (defined (_MFC_VER) || defined (_AFXDLL)) && !defined (_STLP_USE_MFC)
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_MFC 1
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_THREADS)
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VOLATILE volatile
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VOLATILE
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_USE_NEW_C_HEADERS) && !defined (_STLP_HAS_NO_NEW_C_HEADERS)
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_NEW_C_HEADERS
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* disable new-style headers if requested */
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_NEW_C_HEADERS)
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_USE_NEW_C_HEADERS
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_BASE_TYPEDEF_BUG)
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef  _STLP_BASE_TYPEDEF_OUTSIDE_BUG
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BASE_TYPEDEF_OUTSIDE_BUG 1
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NESTED_TYPE_PARAM_BUG)
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_GLOBAL_NESTED_RETURN_TYPE_PARAM_BUG
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* SUNpro 4.2 inline string literal bug */
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_INLINE_STRING_LITERAL_BUG
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_FIX_LITERAL_BUG(__x) __x = __x;
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_FIX_LITERAL_BUG(__x)
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NON_TYPE_TMPL_PARAM_BUG)
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef  _STLP_NO_DEFAULT_NON_TYPE_PARAM
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_DEFAULT_NON_TYPE_PARAM 1
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_STATIC_ASSERT)
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Some compiler support 0 size array so we use negative size array to generate
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * a compilation time error.
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_STATIC_ASSERT(expr) typedef char __static_assert[expr ? 1 : -1];
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* apple mpw exception handling bug */
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_MPWFIX_TRY
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MPWFIX_TRY
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_MPWFIX_CATCH
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MPWFIX_CATCH
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_MPWFIX_CATCH_ACTION
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MPWFIX_CATCH_ACTION(action)
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_WEAK)
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_WEAK
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* default parameters as template types derived from arguments ( not always supported ) */
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_LIMITED_DEFAULT_TEMPLATES)
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_TMPL_PARAM( classname, defval ) class classname
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_DEFAULT_TYPE_PARAM)
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DEFAULT_TYPE_PARAM 1
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_TMPL_PARAM( classname, defval ) class classname = defval
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_LIMITED_DEFAULT_TEMPLATES)
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_Key, _Tp ) class _Alloc
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_DEFAULT_PAIR_ALLOCATOR_SELECT(_Key, _Tp ) \
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott            class _Alloc = allocator< pair < _Key, _Tp > >
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* default parameters as complete types */
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEFAULT_TYPE_PARAM)
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_TYPE_PARAM( classname, defval ) class classname = defval
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_NON_TYPE_PARAM(type,name,val) type name = val
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_TYPE_PARAM( classname, defval ) class classname
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DFL_NON_TYPE_PARAM(type,name,val) type name
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* SGI compatibility */
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_NO_WCHAR_T
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_NO_NATIVE_WIDE_STREAMS
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_NO_NATIVE_WIDE_STREAMS 1
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_HAS_WCHAR_T 1
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_AT_MEMBER_FUNCTION)
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CAN_THROW_RANGE_ERRORS 1
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* debug mode tool */
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG)
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NON_DBG_NAME(X) _NonDbg_##X
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* pointer specialization tool */
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS)
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PTR_IMPL_NAME(X) _Impl_##X
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND) || \
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    defined (_STLP_SIGNAL_RUNTIME_COMPATIBILITY) || defined (_STLP_CHECK_RUNTIME_COMPATIBILITY)
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_MEM_T_NAME(X) _NoMemT_##X
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* this always mean the C library is in global namespace */
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_HAS_NO_NEW_C_HEADERS) && !defined (_STLP_VENDOR_GLOBAL_CSTD)
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VENDOR_GLOBAL_CSTD 1
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Depending of whether compiler supports namespaces,
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * tune the parameters for vendor-supplied libraries.
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This section is guarded by _STLP_HAS_NO_NAMESPACES, not by _STLP_USE_NAMESPACES,
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * since it depends only on the native features, not on user's preference whether
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * to use namespace for STLport or not.
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_HAS_NO_NAMESPACES)
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Import some vendor's headers into corresponding STLport ones if they might be needed
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * (if we wrap native iostreams and use namepace other than std::) */
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_WHOLE_NATIVE_STD)
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_IMPORT_VENDOR_STD 1
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* if using stlport:: namespace or if C library stuff is not in vendor's std::,
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * try importing 'em.
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * MSVC has ambiguity problem when we try to import C-style std:: stuff back into global namespace */
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_NAMESPACES) && (defined(_STLP_USE_OWN_NAMESPACE) || defined (_STLP_VENDOR_GLOBAL_CSTD))
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_IMPORT_VENDOR_CSTD 1
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NO_USING_FOR_GLOBAL_FUNCTIONS) && !defined (_STLP_DO_IMPORT_CSTD_FUNCTIONS)
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_NO_CSTD_FUNCTION_IMPORTS
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USING_NAMESPACE(x) using namespace x ;
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace std { }
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace __std_alias = std;
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* assume std:: namespace for C++ std library if not being told otherwise */
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_VENDOR_GLOBAL_STD)
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_VENDOR_STD
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_VENDOR_STD std
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* tune things that come from C library */
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if  defined (_STLP_VENDOR_GLOBAL_CSTD) || !defined(_STLP_USE_NEW_C_HEADERS)
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*  in old-style headers, C functions go to global scope. */
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_VENDOR_CSTD
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USING_VENDOR_CSTD
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_VENDOR_CSTD  _STLP_VENDOR_STD
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USING_VENDOR_CSTD _STLP_USING_NAMESPACE(_STLP_VENDOR_CSTD)
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* _STLP_VENDOR_CSTD */
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* exception, typeinfo, new - always come from the vendor */
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_VENDOR_EXCEPT_STD)
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined (_STLP_VENDOR_GLOBAL_EXCEPT_STD)
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_VENDOR_EXCEPT_STD
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_VENDOR_EXCEPT_STD _STLP_VENDOR_STD
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_OLD_IO_NAMESPACE
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_VENDOR_MB_NAMESPACE)
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_VENDOR_MB_NAMESPACE _STLP_VENDOR_CSTD
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* compiler has no namespace support */
4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VENDOR_STD
4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VENDOR_CSTD
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USING_NAMESPACE(x)
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USING_VENDOR_CSTD
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_VENDOR_EXCEPT_STD
4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_NAMESPACES)
4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_OWN_NAMESPACE)
4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if !defined (_STLP_STD_NAME)
4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      if !defined (_STLP_DEBUG)
4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        if !defined (_STLP_USING_CROSS_NATIVE_RUNTIME_LIB)
4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          ifndef _STLP_THREADS
4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpmtx_std
4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          else
4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlp_std
4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          endif
4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        else
4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          ifndef _STLP_THREADS
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpxmtx_std
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          else
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpx_std
4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          endif
4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        endif
4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      else
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * The STLport debug mode is binary incompatible with the other modes,
4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * lets make it clear on the STLport namespace to generate link errors rather
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * than runtime ones.
4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        if !defined (_STLP_USING_CROSS_NATIVE_RUNTIME_LIB)
4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          ifndef _STLP_THREADS
4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpdmtx_std
4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          else
4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpd_std
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          endif
4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        else
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          ifndef _STLP_THREADS
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpdxmtx_std
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          else
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#            define _STLP_STD_NAME  stlpdx_std
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          endif
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        endif
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      endif
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace _STLP_STD_NAME { }
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_STD_NAME std
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* _STLP_USE_OWN_NAMESPACE */
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BEGIN_NAMESPACE namespace _STLP_STD_NAME {
500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_BEGIN_TR1_NAMESPACE namespace tr1 {
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_END_NAMESPACE }
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* decide whether or not we use separate namespace for rel ops */
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NO_RELOPS_NAMESPACE)
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_BEGIN_RELOPS_NAMESPACE _STLP_BEGIN_NAMESPACE namespace rel_ops {}
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_END_RELOPS_NAMESPACE }
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Use std::rel_ops namespace */
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_BEGIN_RELOPS_NAMESPACE _STLP_BEGIN_NAMESPACE namespace rel_ops {
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_END_RELOPS_NAMESPACE } }
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USE_SEPARATE_RELOPS_NAMESPACE
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* Use std::rel_ops namespace */
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_STD ::_STLP_STD_NAME
515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (_STLP_TR1)
516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_TR1 _STLP_STD::tr1::
517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (_STLP_DONT_USE_PRIV_NAMESPACE)
520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_PRIV_NAME priv
521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_PRIV _STLP_STD::_STLP_PRIV_NAME::
522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_MOVE_TO_PRIV_NAMESPACE namespace _STLP_PRIV_NAME {
523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_MOVE_TO_STD_NAMESPACE }
524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if !defined (_STLP_PRIV)
526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#        define _STLP_PRIV _STLP_STD::
527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_MOVE_TO_PRIV_NAMESPACE
529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_MOVE_TO_STD_NAMESPACE
530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Official STLport namespace when std is not redefined.
533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Here we don't use a macro because we do not need it and because
534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * stlport is used as file name by boost and folder name under beos:
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace stlport = _STLP_STD_NAME;
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Backward compatibility:
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace _STL = _STLP_STD_NAME;
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef __STLPORT_NAMESPACE
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __STLPORT_NAMESPACE _STLP_STD_NAME
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_USE_NAMESPACES */
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* STLport is being put into global namespace */
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_STD
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PRIV
548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_TR1
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BEGIN_NAMESPACE
550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_BEGIN_TR1_NAMESPACE
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_END_NAMESPACE
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MOVE_TO_PRIV_NAMESPACE
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MOVE_TO_STD_NAMESPACE
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* boris : it was found out that _STLP_USE_SEPARATE_RELOPS_NAMESPACE
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   causes less problems than having relational operator templates in global namespace
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   Please define _STLP_NO_RELOPS_NAMESPACE in config/user_config.h if your code rely on them. */
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_NO_RELOPS_NAMESPACE)
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USE_SEPARATE_RELOPS_NAMESPACE
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BEGIN_RELOPS_NAMESPACE
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_END_RELOPS_NAMESPACE
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef  _STLP_USE_OWN_NAMESPACE
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif  /* _STLP_USE_NAMESPACES */
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define STLPORT_CSTD _STLP_VENDOR_CSTD
5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define STLPORT      _STLP_STD_NAME
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_BOGUS_TEMPLATE_TYPE_MATCHING_BUG)
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_SIMPLE_TYPE(T) _stl_trivial_proxy<T>
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_SIMPLE_TYPE(T) T
5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_RAND48
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_DRAND48
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* advanced keywords usage */
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __C_CAST(__x, __y) ((__x)(__y))
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef  _STLP_NO_NEW_STYLE_CASTS
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __CONST_CAST(__x,__y) const_cast<__x>(__y)
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __STATIC_CAST(__x,__y) static_cast<__x>(__y)
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __REINTERPRET_CAST(__x,__y) reinterpret_cast<__x>(__y)
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __STATIC_CAST(__x,__y) __C_CAST(__x, __y)
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __CONST_CAST(__x,__y) __C_CAST(__x, __y)
5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __REINTERPRET_CAST(__x,__y) __C_CAST(__x, __y)
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NEED_TYPENAME) && ! defined (typename)
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define typename
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NEED_TYPENAME) || defined (_STLP_NO_TYPENAME_ON_RETURN_TYPE )
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TYPENAME_ON_RETURN_TYPE
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TYPENAME_ON_RETURN_TYPE typename
5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_NO_TYPENAME_IN_TEMPLATE_HEADER
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_HEADER_TYPENAME
6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_HEADER_TYPENAME typename
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifdef _STLP_NO_TYPENAME_BEFORE_NAMESPACE
608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_TYPENAME
609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_TYPENAME typename
611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_MEMBER_TEMPLATE_KEYWORD
6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE template
6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_CONTAINERS_EXTENSION)
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_KEY_TYPE_FOR_CONT_EXT(type)
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_FOR_CONT_EXT template <class _KT>
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_KEY_TYPE_FOR_CONT_EXT(type) typedef type _KT;
6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_FOR_CONT_EXT
6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NEED_EXPLICIT) && !defined (explicit)
6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define explicit
6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NEED_MUTABLE)
632e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_MUTABLE(type, x) x
6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
634e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_MUTABLE(type, x) __CONST_CAST(type*, this)->x
6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define mutable
6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NO_SIGNED_BUILTINS)
6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* old HP-UX doesn't understand "signed" keyword */
6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define signed
6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_LOOP_INLINE_PROBLEMS)
6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_INLINE_LOOP
6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_INLINE_LOOP inline
6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX
6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_NULL template<>
6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TEMPLATE_NULL
6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDER
6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_OPERATOR_TEMPLATE
6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_OPERATOR_TEMPLATE _STLP_TEMPLATE_NULL
6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_CLASS_PARTIAL_SPECIALIZATION
6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* unless we have other compiler problem, try simulating partial spec here */
6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)
6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS
6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* For your own iterators, please use inheritance from iterator<> instead of these obsolete queries. */
6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if  (defined (_STLP_NESTED_TYPE_PARAM_BUG) || !defined (_STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS))
6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if ! defined ( _STLP_USE_OLD_HP_ITERATOR_QUERIES )
6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_USE_OLD_HP_ITERATOR_QUERIES
6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif defined ( _STLP_NO_ANACHRONISMS )
6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _STLP_USE_OLD_HP_ITERATOR_QUERIES
6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS
6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NULL_TMPL_ARGS <>
6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else
6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NULL_TMPL_ARGS
6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_ALLOCATOR_TYPE_DFL)
6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_DONT_SUP_DFLT_PARAM)
6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS
6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_ALLOCATOR_TYPE_DFL
6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_ALLOCATOR_TYPE_DFL = allocator_type()
6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* When the compiler do not correctly initialized the basic types value in default parameters we prefer
6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * to avoid them to be able to correct this bug.
6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEF_CONST_DEF_PARAM_BUG)
6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DONT_SUP_DFLT_PARAM 1
6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__SGI_STL_NO_ARROW_OPERATOR) && ! defined (_STLP_NO_ARROW_OPERATOR)
7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_ARROW_OPERATOR
7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !(defined (_STLP_NO_ARROW_OPERATOR)) && \
7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       !defined (_STLP_NO_MSVC50_COMPATIBILITY) && !defined (_STLP_MSVC50_COMPATIBILITY)
7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* this one is needed for proper reverse_iterator<> operator ->() handling */
7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_MSVC50_COMPATIBILITY 1
7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined ( _STLP_CLASS_PARTIAL_SPECIALIZATION )
7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if (defined(__IBMCPP__) && (500 <= __IBMCPP__) && (__IBMCPP__ < 600) )
7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef typename _STLP_STD :: reverse_iterator<const_iterator> const_reverse_iterator; \
7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef typename _STLP_STD :: reverse_iterator<iterator> reverse_iterator
7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif (defined (__sgi) && ! defined (__GNUC__)) || defined (__SUNPRO_CC) || defined (__xlC__)
7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef _STLP_STD:: _STLP_TEMPLATE reverse_iterator<const_iterator> const_reverse_iterator; \
7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef _STLP_STD:: _STLP_TEMPLATE reverse_iterator<iterator> reverse_iterator
7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef _STLP_STD::reverse_iterator<const_iterator> const_reverse_iterator; \
7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   typedef _STLP_STD::reverse_iterator<iterator> reverse_iterator
7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_MSVC50_COMPATIBILITY)
7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_STD::__reverse_iterator<const_iterator, value_type, const_reference, \
7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const_pointer, difference_type>  const_reverse_iterator; \
7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_STD::__reverse_iterator<iterator, value_type, reference, pointer, difference_type> \
7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    reverse_iterator
7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_DECLARE_REVERSE_ITERATORS(__reverse_iterator) \
7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_STD::__reverse_iterator<const_iterator, value_type, const_reference, \
7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    difference_type>  const_reverse_iterator; \
7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_STD::__reverse_iterator<iterator, value_type, \
7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    reference, difference_type> \
7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    reverse_iterator
7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS \
7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _STLP_DECLARE_REVERSE_ITERATORS(reverse_bidirectional_iterator)
7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS \
7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _STLP_DECLARE_REVERSE_ITERATORS(reverse_iterator)
7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __IMPORT_CONTAINER_TYPEDEFS(_Super)                              \
7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::value_type value_type;                      \
7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::size_type size_type;                        \
7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::difference_type difference_type;            \
7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::reference reference;                        \
7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::const_reference const_reference;            \
7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::pointer pointer;                            \
7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::const_pointer const_pointer;                \
7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::allocator_type allocator_type;
7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __IMPORT_ITERATORS(_Super)                                       \
7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::iterator iterator;                          \
7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::const_iterator const_iterator;
7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __IMPORT_REVERSE_ITERATORS(_Super)                                   \
7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::const_reverse_iterator  const_reverse_iterator; \
7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef typename _Super::reverse_iterator reverse_iterator;
7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define  __IMPORT_SUPER_COPY_ASSIGNMENT(__derived_name, _Self, _SUPER)       \
7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __derived_name(const _Super& __x) : _SUPER(__x) {}                       \
7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self& operator=(const _Super& __x) {                                    \
7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        *(_Super*)this = __x;                                                \
7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        return *this;                                                        \
7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }                                                                        \
7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __derived_name(const _Self& __x) : _SUPER(__x) {}                        \
7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Self& operator=(const _Self& __x) {                                     \
7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        *(_Super*)this = __x;                                                \
7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        return *this;                                                        \
7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __IMPORT_WITH_ITERATORS(_Super) \
7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __IMPORT_CONTAINER_TYPEDEFS(_Super) __IMPORT_ITERATORS(_Super)
7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __IMPORT_WITH_REVERSE_ITERATORS(_Super) \
7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __IMPORT_WITH_ITERATORS(_Super) __IMPORT_REVERSE_ITERATORS(_Super)
7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_TRIVIAL_CONSTRUCTOR_BUG)
7869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __TRIVIAL_CONSTRUCTOR(__type) __type() {}
7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __TRIVIAL_CONSTRUCTOR(__type)
7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_TRIVIAL_DESTRUCTOR_BUG)
7929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __TRIVIAL_DESTRUCTOR(__type) ~__type() {}
7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
7949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define __TRIVIAL_DESTRUCTOR(__type)
7959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
7969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __TRIVIAL_STUFF(__type)  \
7989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __TRIVIAL_CONSTRUCTOR(__type) __TRIVIAL_DESTRUCTOR(__type)
7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
800e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_STATIC_CONST_INIT_BUG)
801e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_STATIC_CONSTANT(__type, __assignment) enum { __assignment }
802e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
803e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_STATIC_CONSTANT(__type, __assignment) static const __type __assignment
804e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
805e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
8069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_HAS_NO_EXCEPTIONS)
8079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NO_EXCEPTIONS
8089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_USE_EXCEPTIONS) && !defined (_STLP_NO_EXCEPTIONS) && !defined (_STLP_USE_EXCEPTIONS)
8119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_EXCEPTIONS
8129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_EXCEPTIONS)
8159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TRY try
8169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CATCH_ALL catch(...)
8179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_THROW
8189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_THROW(x) throw x
8199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
8209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RETHROW throw
8219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_UNWIND(action) catch(...) { action; throw; }
8239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifdef _STLP_THROW_RETURN_BUG
8259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_RET_AFTER_THROW(data) return data;
8269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
8279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_RET_AFTER_THROW(data)
8289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
8299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_THROWS)
831e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_THROWS(x) throw(x)
8329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
8339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_NOTHROW)
834e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    define _STLP_NOTHROW throw()
8359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
8369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
8379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_TRY
8389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CATCH_ALL if (false)
8399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_THROW
8409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_THROW(x)
8419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
8429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RETHROW {}
8439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_UNWIND(action)
8449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THROWS(x)
8459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NOTHROW
8469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RET_AFTER_THROW(data)
8479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
8509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Here we check _STLP_NO_EXCEPTIONS which means that the compiler has no
8519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * exception support but not the _STLP_USE_EXCEPTIONS which simply means
8529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * that the user do not want to use them.
8539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
8549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_EXCEPTIONS) && !defined (_STLP_NO_EXCEPTION_SPEC)
8559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THROWS_INHERENTLY(x) throw x
8569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NOTHROW_INHERENTLY throw()
8579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
8589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_THROWS_INHERENTLY(x)
8599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_NOTHROW_INHERENTLY
8609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* STLport function not returning are functions that throw so we translate
8639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * the noreturn functions in throwing functions taking also into account
8649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * exception support activation.
8659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
8669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NORETURN_FUNCTION) && !defined (_STLP_NO_EXCEPTIONS) && \
8679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   !defined (_STLP_FUNCTION_THROWS)
8689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_FUNCTION_THROWS _STLP_NORETURN_FUNCTION
8699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
8709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_FUNCTION_THROWS
8719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_NO_BOOL)
8749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if (defined (__IBMCPP__) && (__IBMCPP__ < 400)) && ! defined (_AIX)
8759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    include <isynonym.hpp>
8769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined (__OS400__)
8779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef int bool;
8789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    elif !( defined (__xlC__) || defined (_AIX))
8799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef Boolean bool;
8809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
8819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
8829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined(_STLP_YVALS_H)
8839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      include <yvals.h>
8849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
8859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      if defined (_STLP_DONT_USE_BOOL_TYPEDEF)
8869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        define bool int
8879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      else
8889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef int bool;
8899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      endif
8909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define true 1
8919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define false 0
8929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
8939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* __IBMCPP__ */
8949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
8959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_BOOL_KEYWORD 1
8969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_NO_BOOL */
8979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* uninitialized value filler */
8999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_SHRED_BYTE
9009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* This value is designed to cause problems if an error occurs */
9019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_SHRED_BYTE 0xA3
9029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_SHRED_BYTE */
9039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* shared library tune-up */
9059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_IMPORT_DECLSPEC
9069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_IMPORT_DECLSPEC
9079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* a keyword used to instantiate export template */
9109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_EXPORT_TEMPLATE_KEYWORD
9119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_EXPORT_TEMPLATE_KEYWORD
9129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_IMPORT_TEMPLATE_KEYWORD
9149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_IMPORT_TEMPLATE_KEYWORD
9159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
917e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_CONST_IN_PAIR)
918e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_CONST const
919e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
920e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_CONST
921e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
922e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
9239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_USE_NO_IOSTREAMS
9249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
9259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * If we do not use iostreams we do not use the export/import
9269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * techniques to avoid build of the STLport library.
9279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
9289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_USE_DECLSPEC
9299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* We also undef USE_DYNAMIC_LIB macro as this macro add some code
9309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * to use the dynamic (shared) STLport library for some platform/compiler
931e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * configuration leading to problem when not linking to the STLport lib.
9329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
9339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_USE_DYNAMIC_LIB
9349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if  defined (_STLP_DLLEXPORT_NEEDS_PREDECLARATION) && defined (_STLP_USE_DECLSPEC)
9379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if ! defined (_STLP_USE_TEMPLATE_EXPORT)
9389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* this setting turns on "extern template" extension use */
9399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_USE_TEMPLATE_EXPORT
9409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_DESIGNATED_DLL) && ! defined (_STLP_NO_FORCE_INSTANTIATE)
9429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_NO_FORCE_INSTANTIATE
9439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DESIGNATED_DLL) /* This is a lib which will contain STLport exports */
9479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define  _STLP_EXPORT _STLP_EXPORT_TEMPLATE_KEYWORD
9489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
9499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define  _STLP_EXPORT _STLP_IMPORT_TEMPLATE_KEYWORD
9509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_EXPORT_TEMPLATE
9539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define  _STLP_EXPORT_TEMPLATE _STLP_EXPORT template
9549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_DECLSPEC) /* using export/import technique */
9579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_EXPORT_DECLSPEC
9599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_EXPORT_DECLSPEC
9609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_IMPORT_DECLSPEC
9629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_IMPORT_DECLSPEC
9639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_CLASS_EXPORT_DECLSPEC
9659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_CLASS_EXPORT_DECLSPEC
9669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_CLASS_IMPORT_DECLSPEC
9689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_CLASS_IMPORT_DECLSPEC
9699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_DESIGNATED_DLL) /* This is a lib which will contain STLport exports */
9719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_DECLSPEC        _STLP_EXPORT_DECLSPEC
9729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_CLASS_DECLSPEC  _STLP_CLASS_EXPORT_DECLSPEC
9739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
9749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_DECLSPEC        _STLP_IMPORT_DECLSPEC   /* Other modules, importing STLport exports */
9759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define  _STLP_CLASS_DECLSPEC  _STLP_CLASS_IMPORT_DECLSPEC
9769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
9779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* Not using DLL export/import specifications */
9799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DECLSPEC
9819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CLASS_DECLSPEC
9829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_EXPORT_TEMPLATE_CLASS _STLP_EXPORT template class _STLP_CLASS_DECLSPEC
9869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
987e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NEED_ADDITIONAL_STATIC_DECLSPEC)
988e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_STATIC_DECLSPEC _STLP_DECLSPEC
9899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
990e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_STATIC_DECLSPEC
9919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_CALL)
9949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CALL
9959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
9969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_NO_IOSTREAMS
9989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
9999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (__DECCXX) && ! defined (__USE_STD_IOSTREAM)
10009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define __USE_STD_IOSTREAM
10019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
10029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* We only need to expose details of streams implementation
10049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   if we use non-standard i/o or are building STLport*/
10059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (__BUILDING_STLPORT) || defined (_STLP_NO_FORCE_INSTANTIATE) || !defined(_STLP_NO_CUSTOM_IO)
10069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_EXPOSE_STREAM_IMPLEMENTATION 1
10079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
10089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* We only need to expose details of global implementation if we are building STLport
10109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   or have not instantiated everything in the lib */
10119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (__BUILDING_STLPORT) || defined (_STLP_NO_FORCE_INSTANTIATE)
10129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef  _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
10139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_EXPOSE_GLOBALS_IMPLEMENTATION 1
10149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
10159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_USE_NO_IOSTREAMS */
10179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* when we are not using SGI iostreams, we must expose globals, but not streams implementation */
10189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
10199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_NO_IOSTREAMS */
10209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS
10229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PSPEC2(t1,t2) < t1,t2 >
10239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PSPEC3(t1,t2,t3) < t1,t2,t3 >
10249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
10259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PSPEC2(t1,t2)  /* nothing */
10269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_PSPEC3(t1,t2,t3)  /* nothing */
10279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
10289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Activation of the partial template workaround:
10309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
10319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(_STLP_DONT_USE_PARTIAL_SPEC_WRKD) &&\
10329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   (!defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || !defined(_STLP_FUNCTION_TMPL_PARTIAL_ORDER))
10339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_USE_PARTIAL_SPEC_WORKAROUND
10349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
10359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE
10379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RELOPS_OPERATORS(_TMPL, _TP) \
10389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_TMPL inline bool _STLP_CALL operator!=(const _TP& __x, const _TP& __y) {return !(__x == __y);}\
10399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_TMPL inline bool _STLP_CALL operator>(const _TP& __x, const _TP& __y)  {return __y < __x;}\
10409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_TMPL inline bool _STLP_CALL operator<=(const _TP& __x, const _TP& __y) { return !(__y < __x);}\
10419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_TMPL inline bool _STLP_CALL operator>=(const _TP& __x, const _TP& __y) { return !(__x < __y);}
10429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
10439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RELOPS_OPERATORS(_TMPL, _TP)
10449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
10459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined ( _STLP_USE_ABBREVS )
10479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_abbrevs.h>
10489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
10499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1050e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Some really useful macro */
10519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_ARRAY_SIZE(A) sizeof(A) / sizeof(A[0])
10529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_ARRAY_AND_SIZE(A) A, sizeof(A) / sizeof(A[0])
10539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1054e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MARK_PARAMETER_AS_UNUSED)
1055e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_MARK_PARAMETER_AS_UNUSED(X) (void*)X;
1056e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1057e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1058e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_CHECK_RUNTIME_COMPATIBILITY)
1059e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_USE_NO_IOSTREAMS)
1060e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    undef _STLP_CHECK_RUNTIME_COMPATIBILITY
1061e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
1062e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* The extern "C" simply makes the symbol simpler. */
1063e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__cplusplus)
1064e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottextern "C"
1065e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1066e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _STLP_DECLSPEC _STLP_CALL _STLP_CHECK_RUNTIME_COMPATIBILITY();
1067e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
1068e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1069e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
10709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* some cleanup */
10719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_DONT_USE_BOOL_TYPEDEF
10729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_YVALS_H
10739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_LOOP_INLINE_PROBLEMS
10749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NEED_EXPLICIT
10759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NEED_TYPENAME
10769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NO_NEW_STYLE_CASTS
10779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef __AUTO_CONFIGURED
10789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
10799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_FEATURES_H */
1080