/***************************************************************************
 *
 * _defs.h - Common macro definitions to be included by every library file
 *
 * This is an internal header file used to implement the C++ Standard
 * Library. It should never be #included directly by a program.
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you under  the Apache
 * License, Version  2.0 (the  "License"); you may  not use  this file
 * except in  compliance with the License.   You may obtain  a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the  License is distributed on an  "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
 * implied.   See  the License  for  the  specific language  governing
 * permissions and limitations under the License.
 *
 * Copyright 1994-2006 Rogue Wave Software.
 *
 **************************************************************************/

#ifndef _RWSTD_RW_DEFS_H_INCLUDED
#define _RWSTD_RW_DEFS_H_INCLUDED

#ifndef _RWSTD_RW_CONFIG_H_INCLUDED
#  include <rw/_config.h>
#endif   //_RWSTD_RW_CONFIG_H_INCLUDED


#ifndef _RWSTD_NO_V3_LOCALE
#  ifndef _RWSTD_NO_NAMESPACE
#    define _V3_LOCALE std
#  else
#    define _V3_LOCALE /* empty */
#  endif   // _RWSTD_NO_NAMESPACE
#endif   // _RWSTD_NO_V3_LOCALE


// provide definitions for C++ versions of standard C headers
// if a header is not available its name is #defined to the name of
// this file (it's harmless and avoids polluting code with
// tons of ugly platform-specific #ifdefs)
#ifndef _RWSTD_NO_NEW_HEADER

#  define _RWSTD_CASSERT   <cassert>
#  define _RWSTD_CCTYPE    <cctype>
#  define _RWSTD_CERRNO    <cerrno>
#  define _RWSTD_CFLOAT    <cfloat>
#  define _RWSTD_CISO646   <ciso646>
#  define _RWSTD_CLIMITS   <climits>
#  define _RWSTD_CLOCALE   <clocale>
#  define _RWSTD_CMATH     <cmath>
#  define _RWSTD_CSETJMP   <csetjmp>
#  define _RWSTD_CSIGNAL   <csignal>

#  ifdef _RWSTD_EDG_ECCP
      // HACK: fool the vanilla EDG front-end into actually #including
      // the file (it normally doesn't and treats <cstdarg> specially)
#     define _RWSTD_CSTDARG <ansi/cstdarg>
#  else   // if !defined (_RWSTD_EDG_ECCP)
#     define _RWSTD_CSTDARG <cstdarg>
#  endif   // _RWSTD_EDG_ECCP

#  define _RWSTD_CSTDDEF   <cstddef>
#  define _RWSTD_CSTDIO    <cstdio>
#  define _RWSTD_CSTDLIB   <cstdlib>
#  define _RWSTD_CSTRING   <cstring>
#  define _RWSTD_CTIME     <ctime>

#  ifndef _RWSTD_NO_WCHAR_H
#    define _RWSTD_CWCHAR  <cwchar>
#  else
#    define _RWSTD_CWCHAR  <rw/_defs.h>
#  endif   // _RWSTD_NO_WCHAR_H

#  ifndef _RWSTD_NO_WCTYPE_H
#    define _RWSTD_CWCTYPE <cwctype>
#  else
#    define _RWSTD_CWCTYPE <rw/_defs.h>
#  endif   // _RWSTD_NO_WCTYPE_H

#else   // if defined (_RWSTD_NO_NEW_HEADER)

#  define _RWSTD_CASSERT   <assert.h>
#  define _RWSTD_CCTYPE    <ctype.h>
#  define _RWSTD_CERRNO    "errno.h"
#  define _RWSTD_CFLOAT    <float.h>
#  define _RWSTD_CISO646   <iso646.h>
#  define _RWSTD_CLIMITS   <limits.h>
#  define _RWSTD_CLOCALE   <locale.h>
#  define _RWSTD_CMATH     <math.h>
#  define _RWSTD_CSETJMP   <setjmp.h>
#  define _RWSTD_CSIGNAL   <signal.h>
#  define _RWSTD_CSTDARG   <stdarg.h>
#  define _RWSTD_CSTDDEF   <stddef.h>
#  define _RWSTD_CSTDIO    <stdio.h>
#  define _RWSTD_CSTDLIB   <stdlib.h>
#  define _RWSTD_CSTRING   <string.h>
#  define _RWSTD_CTIME     <time.h>

#  ifndef _RWSTD_NO_WCHAR_H
#    define _RWSTD_CWCHAR  <wchar.h>
#  else
#    define _RWSTD_CWCHAR  <rw/_defs.h>
#  endif   // _RWSTD_NO_WCHAR_H

#  ifndef _RWSTD_NO_WCTYPE_H
#    define _RWSTD_CWCTYPE <wctype.h>
#  else
#    define _RWSTD_CWCTYPE <rw/_defs.h>
#  endif   // _RWSTD_NO_WCTYPE_H

#endif   // _RWSTD_NO_NEW_HEADER


#if defined(_WIN64)
#  define _RWSTD_SYS_TYPES_H <basetsd.h>
#elif defined(_WIN32)
#  define _RWSTD_SYS_TYPES_H <rw/_defs.h>
#else
#  define _RWSTD_SYS_TYPES_H <sys/types.h>
#endif   // _WIN32

// provide default #definitions of ANSI C library headers
#if defined (_M_IA64)
   // IA64/Itanium SDK paths
#  if !defined (_RWSTD_NO_ASSERT_H) && !defined (_RWSTD_ANSI_C_ASSERT_H)
#    define _RWSTD_ANSI_C_ASSERT_H <../include/crt/assert.h>
#  endif
#  if !defined (_RWSTD_NO_CTYPE_H) && !defined (_RWSTD_ANSI_C_CTYPE_H)
#    define _RWSTD_ANSI_C_CTYPE_H <../include/crt/ctype.h>
#  endif
#  if !defined (_RWSTD_NO_ERRNO_H) && !defined (_RWSTD_ANSI_C_ERRNO_H)
     // pathname quoted in order to prevent the errno macro
     // from expanding in the include directive
#    define _RWSTD_ANSI_C_ERRNO_H "../include/crt/errno.h"
#  endif
#  if !defined (_RWSTD_NO_FLOAT_H) && !defined (_RWSTD_ANSI_C_FLOAT_H)
#    define _RWSTD_ANSI_C_FLOAT_H <../include/crt/float.h>
#  endif
#  if !defined (_RWSTD_NO_ISO646_H) && !defined (_RWSTD_ANSI_C_ISO646_H)
#    define _RWSTD_ANSI_C_ISO646_H <../include/crt/iso646.h>
#  endif  // _RWSTD_NO_ASSERT_H && _RWSTD_ANSI_C_ASSERT_H

#  if !defined (_RWSTD_ANSI_C_LIMITS_H)
#    if !defined (_RWSTD_NO_LIMITS_H)
#      define _RWSTD_ANSI_C_LIMITS_H <../include/crt/limits.h>
#    else
#      define _RWSTD_ANSI_C_LIMITS_H <rw/_defs.h>
#    endif
#  endif  // _RWSTD_ANSI_C_LIMITS_H

#  if !defined (_RWSTD_NO_LOCALE_H) && !defined (_RWSTD_ANSI_C_LOCALE_H)
#    define _RWSTD_ANSI_C_LOCALE_H <../include/crt/locale.h>
#  endif
#  if !defined (_RWSTD_NO_MATH_H) && !defined (_RWSTD_ANSI_C_MATH_H)
#    define _RWSTD_ANSI_C_MATH_H <../include/crt/math.h>
#  endif
#  if !defined (_RWSTD_NO_SETJMP_H) && !defined (_RWSTD_ANSI_C_SETJMP_H)
#    define _RWSTD_ANSI_C_SETJMP_H <../include/crt/setjmp.h>
#  endif
#  if !defined (_RWSTD_NO_SIGNAL_H) && !defined (_RWSTD_ANSI_C_SIGNAL_H)
#    define _RWSTD_ANSI_C_SIGNAL_H <../include/crt/signal.h>
#  endif
#  if !defined (_RWSTD_NO_STDARG_H) && !defined (_RWSTD_ANSI_C_STDARG_H)
#    define _RWSTD_ANSI_C_STDARG_H <../include/crt/stdarg.h>
#  endif
#  if !defined (_RWSTD_NO_STDDEF_H) && !defined (_RWSTD_ANSI_C_STDDEF_H)
#    define _RWSTD_ANSI_C_STDDEF_H <../include/crt/stddef.h>
#  endif
#  if !defined (_RWSTD_NO_STDIO_H) && !defined (_RWSTD_ANSI_C_STDIO_H)
#    define _RWSTD_ANSI_C_STDIO_H <../include/crt/stdio.h>
#  endif
#  if !defined (_RWSTD_NO_STDLIB_H) && !defined (_RWSTD_ANSI_C_STDLIB_H)
#    define _RWSTD_ANSI_C_STDLIB_H <../include/crt/stdlib.h>
#  endif
#  if !defined (_RWSTD_NO_STRING_H) && !defined (_RWSTD_ANSI_C_STRING_H)
#    define _RWSTD_ANSI_C_STRING_H <../include/crt/string.h>
#  endif
#  if !defined (_RWSTD_NO_TIME_H) && !defined (_RWSTD_ANSI_C_TIME_H)
#    define _RWSTD_ANSI_C_TIME_H <../include/crt/time.h>
#  endif
#  if !defined (_RWSTD_NO_WCHAR_H) && !defined (_RWSTD_ANSI_C_WCHAR_H)
#    define _RWSTD_ANSI_C_WCHAR_H <../include/crt/wchar.h>
#  endif

#  if !defined (_RWSTD_ANSI_C_WCTYPE_H)
#    if !defined (_RWSTD_NO_WCTYPE_H)
#      define _RWSTD_ANSI_C_WCTYPE_H <../include/crt/wctype.h>
#    else
#      define _RWSTD_ANSI_C_WCTYPE_H <rw/_defs.h>
#    endif
#  endif   // _RWSTD_ANSI_C_WCTYPE_H

#elif !defined (_RWSTD_NO_FORCE_RELATIVE_PATHS)

#  undef _RWSTD_ANSI_C_ASSERT_H
#  define _RWSTD_ANSI_C_ASSERT_H <../include/assert.h>
#  undef _RWSTD_ANSI_C_CTYPE_H
#  define _RWSTD_ANSI_C_CTYPE_H <../include/ctype.h>
#  undef _RWSTD_ANSI_C_ERRNO_H
   // pathname quoted in order to prevent the errno macro
   // from expanding in the include directive
#  define _RWSTD_ANSI_C_ERRNO_H "../include/errno.h"
#  undef _RWSTD_ANSI_C_FLOAT_H
#  define _RWSTD_ANSI_C_FLOAT_H <../include/float.h>
#  undef _RWSTD_ANSI_C_ISO646_H
#  define _RWSTD_ANSI_C_ISO646_H <../include/iso646.h>

#  undef _RWSTD_ANSI_C_LIMITS_H
#  ifndef _RWSTD_ANSI_C_LIMITS_H
#    define _RWSTD_ANSI_C_LIMITS_H <../include/limits.h>
#  else
#    define _RWSTD_ANSI_C_LIMITS_H <rw/_defs.h>
#  endif

#  undef _RWSTD_ANSI_C_LOCALE_H
#  define _RWSTD_ANSI_C_LOCALE_H <../include/locale.h>
#  undef _RWSTD_ANSI_C_MATH_H
#  define _RWSTD_ANSI_C_MATH_H <../include/math.h>
#  undef _RWSTD_ANSI_C_SETJMP_H
#  define _RWSTD_ANSI_C_SETJMP_H <../include/setjmp.h>
#  undef _RWSTD_ANSI_C_SIGNAL_H
#  define _RWSTD_ANSI_C_SIGNAL_H <../include/signal.h>
#  undef _RWSTD_ANSI_C_STDARG_H
#  define _RWSTD_ANSI_C_STDARG_H <../include/stdarg.h>
#  undef _RWSTD_ANSI_C_STDDEF_H
#  define _RWSTD_ANSI_C_STDDEF_H <../include/stddef.h>
#  undef _RWSTD_ANSI_C_STDIO_H
#  define _RWSTD_ANSI_C_STDIO_H <../include/stdio.h>
#  undef _RWSTD_ANSI_C_STDLIB_H
#  define _RWSTD_ANSI_C_STDLIB_H <../include/stdlib.h>
#  undef _RWSTD_ANSI_C_STRING_H
#  define _RWSTD_ANSI_C_STRING_H <../include/string.h>
#  undef _RWSTD_ANSI_C_TIME_H
#  define _RWSTD_ANSI_C_TIME_H <../include/time.h>

#  undef _RWSTD_ANSI_C_WCHAR_H
#  ifndef _RWSTD_NO_WCHAR_H
#    define _RWSTD_ANSI_C_WCHAR_H <../include/wchar.h>
#  else
#    define _RWSTD_ANSI_C_WCHAR_H <rw/_defs.h>
#  endif

#  undef _RWSTD_ANSI_C_WCTYPE_H
#  ifndef _RWSTD_NO_WCTYPE_H
#    define _RWSTD_ANSI_C_WCTYPE_H <../include/wctype.h>
#  else
#    define _RWSTD_ANSI_C_WCTYPE_H <rw/_defs.h>
#  endif

#elif defined (_RWSTD_USE_USR_INCLUDE_HEADERS)

#  if !defined (_RWSTD_NO_ASSERT_H) && !defined (_RWSTD_ANSI_C_ASSERT_H)
#    define _RWSTD_ANSI_C_ASSERT_H </usr/include/assert.h>
#  endif
#  if !defined (_RWSTD_NO_CTYPE_H) && !defined (_RWSTD_ANSI_C_CTYPE_H)
#    define _RWSTD_ANSI_C_CTYPE_H </usr/include/ctype.h>
#  endif
#  if !defined (_RWSTD_NO_ERRNO_H) && !defined (_RWSTD_ANSI_C_ERRNO_H)
     // pathname quoted in order to prevent the errno macro
     // from expanding in the include directive
#    define _RWSTD_ANSI_C_ERRNO_H "/usr/include/errno.h"
#  endif
#  if !defined (_RWSTD_NO_FLOAT_H) && !defined (_RWSTD_ANSI_C_FLOAT_H)
#    define _RWSTD_ANSI_C_FLOAT_H </usr/include/float.h>
#  endif
#  if !defined (_RWSTD_NO_ISO646_H) && !defined (_RWSTD_ANSI_C_ISO646_H)
#    define _RWSTD_ANSI_C_ISO646_H </usr/include/iso646.h>
#  endif  // _RWSTD_NO_ASSERT_H && _RWSTD_ANSI_C_ASSERT_H

#  if !defined (_RWSTD_ANSI_C_LIMITS_H)
#    if !defined (_RWSTD_NO_LIMITS_H)
#      define _RWSTD_ANSI_C_LIMITS_H </usr/include/limits.h>
#    else
#      define _RWSTD_ANSI_C_LIMITS_H <rw/_defs.h>
#    endif
#  endif  // _RWSTD_ANSI_C_LIMITS_H

#  if !defined (_RWSTD_NO_LOCALE_H) && !defined (_RWSTD_ANSI_C_LOCALE_H)
#    define _RWSTD_ANSI_C_LOCALE_H </usr/include/locale.h>
#  endif
#  if !defined (_RWSTD_NO_MATH_H) && !defined (_RWSTD_ANSI_C_MATH_H)
#    define _RWSTD_ANSI_C_MATH_H </usr/include/math.h>
#  endif
#  if !defined (_RWSTD_NO_SETJMP_H) && !defined (_RWSTD_ANSI_C_SETJMP_H)
#    define _RWSTD_ANSI_C_SETJMP_H </usr/include/setjmp.h>
#  endif
#  if !defined (_RWSTD_NO_SIGNAL_H) && !defined (_RWSTD_ANSI_C_SIGNAL_H)
#    define _RWSTD_ANSI_C_SIGNAL_H </usr/include/signal.h>
#  endif
#  if !defined (_RWSTD_NO_STDARG_H) && !defined (_RWSTD_ANSI_C_STDARG_H)
#    define _RWSTD_ANSI_C_STDARG_H </usr/include/stdarg.h>
#  endif
#  if !defined (_RWSTD_NO_STDDEF_H) && !defined (_RWSTD_ANSI_C_STDDEF_H)
#    define _RWSTD_ANSI_C_STDDEF_H </usr/include/stddef.h>
#  endif
#  if !defined (_RWSTD_NO_STDIO_H) && !defined (_RWSTD_ANSI_C_STDIO_H)
#    define _RWSTD_ANSI_C_STDIO_H </usr/include/stdio.h>
#  endif
#  if !defined (_RWSTD_NO_STDLIB_H) && !defined (_RWSTD_ANSI_C_STDLIB_H)
#    define _RWSTD_ANSI_C_STDLIB_H </usr/include/stdlib.h>
#  endif
#  if !defined (_RWSTD_NO_STRING_H) && !defined (_RWSTD_ANSI_C_STRING_H)
#    define _RWSTD_ANSI_C_STRING_H </usr/include/string.h>
#  endif
#  if !defined (_RWSTD_NO_TIME_H) && !defined (_RWSTD_ANSI_C_TIME_H)
#    define _RWSTD_ANSI_C_TIME_H </usr/include/time.h>
#  endif
#  if !defined (_RWSTD_NO_WCHAR_H) && !defined (_RWSTD_ANSI_C_WCHAR_H)
#    define _RWSTD_ANSI_C_WCHAR_H </usr/include/wchar.h>
#  endif

#  if !defined (_RWSTD_ANSI_C_WCTYPE_H)
#    if !defined (_RWSTD_NO_WCTYPE_H)
#      define _RWSTD_ANSI_C_WCTYPE_H </usr/include/wctype.h>
#    else
#      define _RWSTD_ANSI_C_WCTYPE_H <rw/_defs.h>
#    endif
#  endif   // _RWSTD_ANSI_C_WCTYPE_H

#else   // if !_WIN64 && !_RWSTD_USE_USR_INCLUDE_HEADERS

#  if !defined (_RWSTD_NO_ASSERT_H) && !defined (_RWSTD_ANSI_C_ASSERT_H)
#    define _RWSTD_ANSI_C_ASSERT_H <../include/assert.h>
#  endif
#  if !defined (_RWSTD_NO_CTYPE_H) && !defined (_RWSTD_ANSI_C_CTYPE_H)
#    define _RWSTD_ANSI_C_CTYPE_H <../include/ctype.h>
#  endif
#  if !defined (_RWSTD_NO_ERRNO_H) && !defined (_RWSTD_ANSI_C_ERRNO_H)
     // pathname quoted in order to prevent the errno macro
     // from expanding in the include directive
#    define _RWSTD_ANSI_C_ERRNO_H "../include/errno.h"
#  endif
#  if !defined (_RWSTD_NO_FLOAT_H) && !defined (_RWSTD_ANSI_C_FLOAT_H)
#    define _RWSTD_ANSI_C_FLOAT_H <../include/float.h>
#  endif
#  if !defined (_RWSTD_NO_ISO646_H) && !defined (_RWSTD_ANSI_C_ISO646_H)
#    define _RWSTD_ANSI_C_ISO646_H <../include/iso646.h>
#  endif  // _RWSTD_NO_ASSERT_H && _RWSTD_ANSI_C_ASSERT_H

#  if !defined (_RWSTD_ANSI_C_LIMITS_H)
#    if !defined (_RWSTD_NO_LIMITS_H)
#      define _RWSTD_ANSI_C_LIMITS_H <../include/limits.h>
#    else
#      define _RWSTD_ANSI_C_LIMITS_H <rw/_defs.h>
#    endif
#  endif  // _RWSTD_ANSI_C_LIMITS_H

#  if !defined (_RWSTD_NO_LOCALE_H) && !defined (_RWSTD_ANSI_C_LOCALE_H)
#    define _RWSTD_ANSI_C_LOCALE_H <../include/locale.h>
#  endif
#  if !defined (_RWSTD_NO_MATH_H) && !defined (_RWSTD_ANSI_C_MATH_H)
#    define _RWSTD_ANSI_C_MATH_H <../include/math.h>
#  endif
#  if !defined (_RWSTD_NO_SETJMP_H) && !defined (_RWSTD_ANSI_C_SETJMP_H)
#    define _RWSTD_ANSI_C_SETJMP_H <../include/setjmp.h>
#  endif
#  if !defined (_RWSTD_NO_SIGNAL_H) && !defined (_RWSTD_ANSI_C_SIGNAL_H)
#    define _RWSTD_ANSI_C_SIGNAL_H <../include/signal.h>
#  endif
#  if !defined (_RWSTD_NO_STDARG_H) && !defined (_RWSTD_ANSI_C_STDARG_H)
#    define _RWSTD_ANSI_C_STDARG_H <../include/stdarg.h>
#  endif
#  if !defined (_RWSTD_NO_STDDEF_H) && !defined (_RWSTD_ANSI_C_STDDEF_H)
#    define _RWSTD_ANSI_C_STDDEF_H <../include/stddef.h>
#  endif
#  if !defined (_RWSTD_NO_STDIO_H) && !defined (_RWSTD_ANSI_C_STDIO_H)
#    define _RWSTD_ANSI_C_STDIO_H <../include/stdio.h>
#  endif
#  if !defined (_RWSTD_NO_STDLIB_H) && !defined (_RWSTD_ANSI_C_STDLIB_H)
#    define _RWSTD_ANSI_C_STDLIB_H <../include/stdlib.h>
#  endif
#  if !defined (_RWSTD_NO_STRING_H) && !defined (_RWSTD_ANSI_C_STRING_H)
#    define _RWSTD_ANSI_C_STRING_H <../include/string.h>
#  endif
#  if !defined (_RWSTD_NO_TIME_H) && !defined (_RWSTD_ANSI_C_TIME_H)
#    define _RWSTD_ANSI_C_TIME_H <../include/time.h>
#  endif
#  if !defined (_RWSTD_NO_WCHAR_H) && !defined (_RWSTD_ANSI_C_WCHAR_H)
#    define _RWSTD_ANSI_C_WCHAR_H <../include/wchar.h>
#  endif

#  if !defined (_RWSTD_ANSI_C_WCTYPE_H)
#    if !defined (_RWSTD_NO_WCTYPE_H)
#      define _RWSTD_ANSI_C_WCTYPE_H <../include/wctype.h>
#    else
#      define _RWSTD_ANSI_C_WCTYPE_H <rw/_defs.h>
#    endif
#  endif   // _RWSTD_ANSI_C_WCTYPE_H
#endif  // !_WIN64



// These macros tune the speed vs. space optimization of container
// performance with regard to allocation of memory. These have been tuned
// with speed efficiency as a primary conern. Space efficiency was
// considered, but was secondary. (refer to Onyx QA Entry #4920)
//
// The ratio parameter must be above one for an amortized constant time
// algorithm.  Lowering the ratio will lower rapidity and improve space
// efficiency. This effect will be most noticeable when working with
// containers of few elements (few being less than 32 for the general case)
// If your use case is with containers that typically have many elements
// lowering the ratio will have less effect on rapidity.
//
// The minimum elements parameter refers to minimum amount of additional
// capacity requested (in number of elements) when more memory is needed.
// Rapidity with containers of few elements will be affected most noticeably
// as this amount this is lowered.
//
// For strings, the specializations on char and wchar_t were seen as an
// exploitable common case, and have their own more specialized template
// function overloads in the string header.  These are tweakable here
// with the STRING version of these macros.
//
#if !defined(_RWSTD_MINIMUM_NEW_CAPACITY)
#  define _RWSTD_MINIMUM_NEW_CAPACITY   32U
#endif
#if !defined(_RWSTD_NEW_CAPACITY_RATIO)
   // using long doubles to eliminate bogus warnings on g++ 2.95.2/sparc
   // (-W -O2/3 only): warning: overflow on truncation to integer
#  define _RWSTD_NEW_CAPACITY_RATIO 1.618L
#endif
#if !defined(_RWSTD_MINIMUM_STRING_CAPACITY)
#  define _RWSTD_MINIMUM_STRING_CAPACITY   128U
#endif
#if !defined(_RWSTD_STRING_CAPACITY_RATIO)
#  define _RWSTD_STRING_CAPACITY_RATIO 1.618L
#endif

#if !defined (_RWSTD_MINIMUM_STRINGBUF_CAPACITY)
#  define _RWSTD_MINIMUM_STRINGBUF_CAPACITY   512
#endif   // _RWSTD_MINIMUM_STRINGBUF_CAPACITY

// working around an HP aCC bug (PR #25354 and 22610)
#if !defined (__HP_aCC)
#  define _RWSTD_NEW_CAPACITY(ignore, what, from)   \
      _RW::__rw_new_capacity (from, what)
#else
#  define _RWSTD_NEW_CAPACITY(T, what, from)   \
      _RW::__rw_new_capacity<T>(from, what)
#endif   // HP aCC

// set up Win32/64 DLL export/import directives
// _DLL - defined by the compiler when either -MD or -MDd is used
// RWDLL - defined for all Rogue Wave(R) products built as shared libs
// _RWSHARED - defined for libstd built/used as a shared lib
#if (defined (_WIN32) || defined (_WIN64)) && \
    (defined (RWDLL)  || defined (_RWSHARED))

#  ifdef _RWSTD_LIB_SRC
#    define _RWSTD_EXPORT            __declspec (dllexport)
#  else
#    define _RWSTD_EXPORT            __declspec (dllimport)
#  endif   // _RWSTD_LIB_SRC

#  if _MSC_VER >= 1300
#    define _RWSTD_CLASS_EXPORT    _RWSTD_EXPORT
#    define _RWSTD_MEMBER_EXPORT   /* empty */
#  else   // if MSVC < 7.0
#    define _RWSTD_CLASS_EXPORT    /* empty */
#    define _RWSTD_MEMBER_EXPORT   _RWSTD_EXPORT
#  endif   // MSVC >= 7.0

   // disable warnings:
   // C4251: class needs to have dll-interface to be used by cliens
   // C4275: non dll-interface class used as base for dll-interface class
#  pragma warning (disable: 4251)
#  pragma warning (disable: 4275)

#else
   // disable Windows hacks
#  define _RWSTD_EXPORT          /* empty */
#  define _RWSTD_CLASS_EXPORT    /* empty */
#  define _RWSTD_MEMBER_EXPORT   /* empty */
#endif // _WIN32 || _WIN64

#ifdef _RWSTD_NO_BOOL
#  define bool    int
#  define false   0
#  define true    1
#endif // _RWSTD_NO_BOOL


#ifndef _RWSTD_NO_TYPENAME
#  define _TYPENAME   typename
#else
#  define _TYPENAME   /* empty */
#endif


#ifndef _RWSTD_NO_EXPLICIT
#  define _EXPLICIT   explicit
#else
#  define _EXPLICIT   /* empty */
#endif


#ifndef _RWSTD_NO_EXPORT
#  define _EXPORT   export
#else
#  define _EXPORT   /* empty */
#endif


#ifndef _RWSTD_NO_MUTABLE
#  define _MUTABLE   mutable
#else
#  define _MUTABLE   /* empty */
#endif


//
// Macro for forming or omitting default template arguments in constructors
//

#ifndef _RWSTD_NO_DEFAULT_TEMPLATE_ARGS
#  define _RWSTD_DEFAULT_ARG(n) = n
#else
#  define _RWSTD_DEFAULT_ARG(n)
#endif



// Work around a bug in MSVC (see PR# 28547); used in basic_string
#if !defined (_MSC_VER) || _MSC_VER < 1300
#  define _RWSTD_REDECLARED_DEFAULT(arg)   = arg
#else   // if !(!defined (_MSC_VER) || (_MSC_VER < 1300))
#  define _RWSTD_REDECLARED_DEFAULT(ignore)
#endif   // !defined (_MSC_VER) || (_MSC_VER < 1300)


// Macro for casting, using either the "old" method
// or the new C++ cast system
#ifndef _RWSTD_NO_STATIC_CAST
#  define _RWSTD_STATIC_CAST(T, x)      static_cast< T >(x)
#  define _RWSTD_REINTERPRET_CAST(T, x) reinterpret_cast< T >(x)
#  define _RWSTD_CONST_CAST(T, x)       const_cast< T >(x)
#else   // if defined (_RWSTD_NO_STATIC_CAST)
#  define _RWSTD_STATIC_CAST(T, x)      ((T)x)
#  define _RWSTD_REINTERPRET_CAST(T, x) ((T)x)
#  define _RWSTD_CONST_CAST(T, x)       ((T)x)
#endif   // _RWSTD_NO_STATIC_CAST

#ifndef _RWSTD_NO_DYNAMIC_CAST
#  define _RWSTD_DYNAMIC_CAST(T, x)      dynamic_cast< T >(x)
#else   // if defined (_RWSTD_NO_DYNAMIC_CAST)
#  define _RWSTD_DYNAMIC_CAST(T, x)      ((T)x)
#endif   // _RWSTD_NO_DYNAMIC_CAST

//
// Macros for the new template specialization syntax
//

#ifdef _RWSTD_NO_NEW_FUNC_TEMPLATE_SYNTAX
#  define _RWSTD_SPECIALIZED_FUNCTION
#else
#  define _RWSTD_SPECIALIZED_FUNCTION template<>
#endif

#ifdef _RWSTD_NO_NEW_CLASS_TEMPLATE_SYNTAX
#  define _RWSTD_SPECIALIZED_CLASS
#else
#  define _RWSTD_SPECIALIZED_CLASS template<>
#endif

// for compilers or environments that do not support namespaces
#ifndef _RWSTD_NO_NAMESPACE
#  define _RWSTD_NAMESPACE(name)    namespace name
#  define _USING(name)              using name

#  undef _STD
#  define _STD   std
#  define _RW    __rw

#else   // if defined (_RWSTD_NO_NAMESPACE)
#  define _RWSTD_NAMESPACE(ignore)    extern "C++"
#  define _USING(ignore)              typedef void __rw_unused_type

#  undef _STD
#  define _STD
#  define _RW
#endif   // _RWSTD_NO_NAMESPACE

//
// for compilers that don't like specialized friends
// such as operator== in template classes
//
#ifdef _RWSTD_NO_SPECIALIZED_FRIEND
#  ifdef __TURBOC__
#    define _RWSTD_SPECIALIZED_FRIEND(name)   (_STD::name)
#  else   // if !defined (__TURBOC__)
#    define _RWSTD_SPECIALIZED_FRIEND(name)   name
#  endif   // __TURBOC__
#else   // if defined (_RWSTD_NO_SPECIALIZED_FRIEND)
#  ifdef __TURBOC__
#    define _RWSTD_SPECIALIZED_FRIEND(name)   (_STD::name)
#  else   // if !defined (__TURBOC__)
     // the space between `name' and `<>' is necessary
     // to prevent ..._FRIEND (operator<) from expanding into operator<<>
     // (only the GNU preprocessor inserts a space)
#    define _RWSTD_SPECIALIZED_FRIEND(name)   name <>
#  endif  // __TURBOC__
#endif   // _RWSTD_NO_SPECIALIZED_FRIEND


//
// If compiler supports member and default templates then it supports
// the _RWSTD_ALLOCATOR
//
#if    !defined (_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) \
    && (!defined (_MSC_VER) || _MSC_VER >= 1300)
#  define _RWSTD_ALLOCATOR
#endif


#define _RWSTD_MB_CUR_MAX 16  // FIXME: must be determined dynamically

// helper macros for token pasting
#define _RWSTD_DO_PASTE(a, b)    a ## b
#define _RWSTD_PASTE(a, b)       _RWSTD_DO_PASTE (a, b)

#ifdef _RWSTD_REENTRANT
// synchronizes access by all objects holding the same mutex
#  define _RWSTD_MT_GUARD(mutex)  \
          _RW::__rw_guard _RWSTD_PASTE (__guard, __LINE__) (mutex)

// synchronizes access by all threads holding the same mutex 
#  define _RWSTD_MT_STATIC_GUARD(type)                               \
          typedef _RW::__rw_type<type,__LINE__> _UniqueType;         \
          _RWSTD_MT_CLASS_GUARD(_UniqueType)

// synchronizes access by all objects of the same type
#  define _RWSTD_MT_CLASS_GUARD(type)                                \
          _RWSTD_MT_GUARD (_RW::__rw_get_static_mutex ((type*)0))

#  define _RWSTD_ATOMIC_PREINCREMENT(x, mutex)                       \
          _RW::__rw_atomic_preincrement (x, mutex)

#  define _RWSTD_ATOMIC_PREDECREMENT(x, mutex)                       \
          _RW::__rw_atomic_predecrement (x, mutex)

#  define _RWSTD_ATOMIC_SWAP(x, y, mutex)                            \
          _RW::__rw_atomic_exchange  (x, y, mutex)

#  ifndef _RWSTD_NO_EXT_REENTRANT_IO
// conditional swap used in iostreams
#    define _RWSTD_ATOMIC_IO_SWAP(x, y, mutex)                       \
            ((this->flags () & _RWSTD_IOS_NOLOCK) ?                  \
                _RW::__rw_ordinary_exchange  (x, y)                  \
             :  _RW::__rw_atomic_exchange  (x, y, mutex))

#  else   // if defined (_RWSTD_NO_EXT_REENTRANT_IO)
#    define _RWSTD_ATOMIC_IO_SWAP(x, y, mutex)                       \
            _RWSTD_ATOMIC_SWAP(x, y, mutex)
#  endif    // _RWSTD_NO_EXT_REENTRANT_IO

#  if defined (_PA_RISC2_0)

#    define _RWSTD_STRING_ATOMIC_PREINCREMENT(x, mutex)              \
            _RW::__rw_string_atomic_preincrement (x, mutex)

#    define _RWSTD_STRING_ATOMIC_PREDECREMENT(x, mutex)              \
            _RW::__rw_string_atomic_predecrement (x, mutex)

#    define _RWSTD_STRING_ATOMIC_SWAP(x, y, mutex)                   \
            _RW::__rw_string_atomic_exchange (x, y, mutex)

#  else   // if !_PA_RISC2_0
#    define _RWSTD_STRING_ATOMIC_PREINCREMENT(x, mutex)              \
            _RWSTD_ATOMIC_PREINCREMENT (x, mutex)
#    define _RWSTD_STRING_ATOMIC_PREDECREMENT(x, mutex)              \
            _RWSTD_ATOMIC_PREDECREMENT (x, mutex)
#    define _RWSTD_STRING_ATOMIC_SWAP(x, y, mutex)                   \
            _RWSTD_ATOMIC_SWAP (x, y, mutex)
#  endif   // !_PA_RISC2_0

   // thread-local storage
#  ifndef _RWSTD_NO_TLS
#    ifndef _RWSTD_THREAD
       // if the macro isn't yet #defined (e.g., in _config.h)
       // use the generally accepted (e.g., HP aCC, gcc, SunPro)
       // __thread extension
#      define _RWSTD_THREAD   __thread
#    endif   // _RWSTD_THREAD

#    define _RWSTD_THREAD_PREINCREMENT(x, ignore)                    \
        (++(x))
#    define _RWSTD_THREAD_PREDECREMENT(x, ignore)                    \
        (--(x))
#    define _RWSTD_THREAD_SWAP(x, y, ignore)                         \
        _RW::__rw_ordinary_exchange  (x, y)

#  endif   // _RWSTD_NO_TLS

#else   // if !defined _RWSTD_REENTRANT

#  define _RWSTD_MT_GUARD(ignore)                   ((void)0)
#  define _RWSTD_MT_STATIC_GUARD(name)              _RWSTD_MT_GUARD (name)
#  define _RWSTD_MT_CLASS_GUARD(type)               _RWSTD_MT_GUARD (type)

#  define _RWSTD_ATOMIC_PREINCREMENT(x, ignore)     ++(x)
#  define _RWSTD_ATOMIC_PREDECREMENT(x, ignore)     --(x)
#  define _RWSTD_ATOMIC_SWAP(x, y, ignore)  \
          _RW::__rw_atomic_exchange ((x), (y), false)

#  define _RWSTD_ATOMIC_IO_SWAP(x, y, ignore)  \
          _RW::__rw_ordinary_exchange ((x), (y))

#  define _RWSTD_STRING_ATOMIC_PREINCREMENT(x, mutex) \
          _RWSTD_ATOMIC_PREINCREMENT(x, mutex)
#  define _RWSTD_STRING_ATOMIC_PREDECREMENT(x, mutex) \
          _RWSTD_ATOMIC_PREDECREMENT(x, mutex)
#  define _RWSTD_STRING_ATOMIC_SWAP(x, y, mutex) \
          _RWSTD_ATOMIC_SWAP(x, y, mutex)

#endif   // _RWSTD_REENTRANT

// thread-local storage declaration
#ifndef _RWSTD_THREAD
#  define _RWSTD_THREAD   /* empty */
#endif   // _RWSTD_THREAD

// thread-local storage manipulation
#ifndef _RWSTD_THREAD_PREINCREMENT
#  define _RWSTD_THREAD_PREINCREMENT(x, mutex)                  \
          _RWSTD_ATOMIC_PREINCREMENT (x, mutex)
#endif   // _RWSTD_THREAD_PREINCREMENT

#ifndef _RWSTD_THREAD_PREDECREMENT
#  define _RWSTD_THREAD_PREDECREMENT(x, mutex)                  \
          _RWSTD_ATOMIC_PREDECREMENT (x, mutex)
#endif   // _RWSTD_THREAD_PREDECREMENT

#ifndef _RWSTD_THREAD_SWAP
#  define _RWSTD_THREAD_SWAP(x, y, ignore)                       \
          _RWSTD_ATOMIC_SWAP (x, y, mutex)
#endif   // _RWSTD_THREAD_SWAP

// macro for qualifying C library names in the std namespace
#ifndef _RWSTD_NO_LIBC_IN_STD
#  ifndef _RWSTD_NO_NAMESPACE
#    define _RWSTD_C std
#  else
#    define _RWSTD_C /* empty */
#  endif   // _RWSTD_NO_LIBC_IN_STD
#else
#  define _RWSTD_C   /* empty */
#endif

#define _RWSTD_INVALID_FILE_DESC -1
#define _RWSTD_INVALID_FILE_PTR   0

#ifndef _RWSTD_NO_NATIVE_IO
# define _RWSTD_INVALID_FILE     -1
# define _RWSTD_INVALID_OPENMODE -1
#else
# define _RWSTD_INVALID_FILE      (FILE*)0
# define _RWSTD_INVALID_OPENMODE  0
#endif // _RWSTD_NO_NATIVE_IO


//  std::streamoff and std::streamsize defined in <ios>
#define _RWSTD_STREAMOFF    _RWSTD_PTRDIFF_T
#define _RWSTD_STREAMSIZE   _RWSTD_PTRDIFF_T


// std::ios_base static const data members' values
#define _RWSTD_IOS_BOOLALPHA    0x00001
#define _RWSTD_IOS_DEC          0x00002
#define _RWSTD_IOS_FIXED        0x00004
#define _RWSTD_IOS_HEX          0x00008
#define _RWSTD_IOS_INTERNAL     0x00010
#define _RWSTD_IOS_LEFT         0x00020
#define _RWSTD_IOS_OCT          0x00040
#define _RWSTD_IOS_RIGHT        0x00080
#define _RWSTD_IOS_SCIENTIFIC   0x00100
#define _RWSTD_IOS_SHOWBASE     0x00200
#define _RWSTD_IOS_SHOWPOINT    0x00400
#define _RWSTD_IOS_SHOWPOS      0x00800
#define _RWSTD_IOS_SKIPWS       0x01000
#define _RWSTD_IOS_UNITBUF      0x02000
#define _RWSTD_IOS_UPPERCASE    0x04000
#define _RWSTD_IOS_BIN          0x08000
// NOLOCK[BUF] used rather than LOCK[BUF] to maintain functional compatibility
// with release 2.2 (which was always safe when these bits were cleared)
#define _RWSTD_IOS_NOLOCK       0x10000
#define _RWSTD_IOS_NOLOCKBUF    0x20000
// SYNC_STDIO is set for stream objects that may need to be synchronized
// with stdio (by default the standard iostream objects such as cout)
#define _RWSTD_IOS_SYNC_STDIO   0x40000

#define _RWSTD_IOS_FLOATFIELD   (_RWSTD_IOS_FIXED | _RWSTD_IOS_SCIENTIFIC)

#define _RWSTD_IOS_ADJUSTFIELD    \
        (_RWSTD_IOS_LEFT | _RWSTD_IOS_RIGHT | _RWSTD_IOS_INTERNAL)

#ifndef _RWSTD_NO_EXT_BIN_IO
#  define _RWSTD_IOS_BASEFIELD    \
          (_RWSTD_IOS_DEC | _RWSTD_IOS_HEX | _RWSTD_IOS_OCT | _RWSTD_IOS_BIN)
#else
#  define _RWSTD_IOS_BASEFIELD    \
          (_RWSTD_IOS_DEC | _RWSTD_IOS_HEX | _RWSTD_IOS_OCT)
#endif   // _RWSTD_NO_EXT_BIN_IO

// offset of most significant bits where numeric base is stored
#define _RWSTD_IOS_BASEMASK      63
#define _RWSTD_IOS_BASEOFF       26

#define _RWSTD_IOS_GOODBIT       0x00
#define _RWSTD_IOS_BADBIT        0x01
#define _RWSTD_IOS_EOFBIT        0x02
#define _RWSTD_IOS_FAILBIT       0x04
#define _RWSTD_IOS_NOTHROW       0x08   // prevents clear() from throwing
#define _RWSTD_IOS_RETHROW       0x10   // clear() rethrows if appropriate

// ios_base::openmode constants
#define _RWSTD_IOS_APP           0x01
#define _RWSTD_IOS_BINARY        0x02
#define _RWSTD_IOS_IN            0x04
#define _RWSTD_IOS_OUT           0x08
#define _RWSTD_IOS_TRUNC         0x10
#define _RWSTD_IOS_ATE           0x20
#define _RWSTD_IOS_NOCREATE      0x40   // filebuf extension
#define _RWSTD_IOS_NOREPLACE     0x80   // filebuf extension
#define _RWSTD_IOS_STDIO         0x100  // filebuf extension
#define _RWSTD_IOS_NATIVE        0x200  // filebuf extension

#define _RWSTD_IOS_OPENMODE_MASK                 \
  (  _RWSTD_IOS_APP      | _RWSTD_IOS_BINARY     \
   | _RWSTD_IOS_IN       | _RWSTD_IOS_OUT        \
   | _RWSTD_IOS_TRUNC    | _RWSTD_IOS_ATE        \
   | _RWSTD_IOS_NOCREATE | _RWSTD_IOS_NOREPLACE  \
   | _RWSTD_IOS_STDIO    | _RWSTD_IOS_NATIVE)

#if    !defined (_RWSTD_NO_STATIC_IOSTREAM_INIT)  \
    && !defined (_RWSTD_NO_IOSTREAM_OBJECT_REFS)
   // standard iostream objects are references
#  define _RWSTD_IOSTREAM_OBJECT(name)   &name
#else
   // standard iostream objects are declared to be real objects
   // they may be implemented as real objects of the same type
   // that get destroyed during program lifetime or as objects
   // of some POD type that do not get destroyed at all
#  define _RWSTD_IOSTREAM_OBJECT(name)   name
#endif   //  _RWSTD_NO_STATIC_IOSTREAM_INIT && !_RWSTD_NO_IOSTREAM_OBJECT_REFS


// exceptions can be completely disabled (bodies of catch blocks are still
// compiled but will be removed by the optimizing stage of the compiler)
// this approach reveals any errors even if _RWSTD_NO_EXCEPTIONS is #defined
#ifndef _RWSTD_NO_EXCEPTIONS
#  define _TRY           try
#  define _CATCH(ex)     catch (ex)
#  define _THROW(ex)     throw ex
#  define _RETHROW       throw
#else   // if defined (_RWSTD_NO_EXCEPTIONS)
#  define _TRY
#  define _CATCH(ignore)   while (0)
#  define _THROW(ignore)   ((void)0)
#  define _RETHROW         ((void)0)
#endif   // _RWSTD_NO_EXCEPTIONS


// for compilers that can't handle standard allocators we provide four
// workarounds: _RWSTD_REBIND, used in place of _Allocator::rebind, allows
// containers to use the same allocator for different data types
// _RWSTD_ALLOC_TYPE is required to "rebind", or rather wrap,  the user
// supplied non-conforming allocator in allocator_interface so that the
// container need not be aware of the allocator's special properties (namely
// the fact that the allocator allocates in terms of bytes rather than
// elemements)
//
// _RWSTD_VALUE_ALLOC creates a temporary allocator_interface wrapper
// from the given parameter (usually *this) when allocating values in
// the sequence containers with non-conforming allocators.
// _RWSTD_VALUE_ALLOC_CAST casts the given container to a reference to
// a value allocator, allowing access to inherited allocator members
// outside of the class.  For non-conforming compilers, this macro is
// equivalent to _RWSTD_VALUE_ALLOC.
//
// NOTE: the spaces around type below are necessary to prevent errors
//       if `to' is a template-id and the preprocessor doesn't put
//       the spaces there automatically (GNU does, Sun does not)
#ifdef _RWSTD_ALLOCATOR
#  ifndef _RWSTD_NO_DEPENDENT_TEMPLATE
#    define _RWSTD_REBIND(from, to) \
            _TYPENAME from::template rebind < to >::other
#  else
#    define _RWSTD_REBIND(from, to) \
            _TYPENAME from:: rebind < to >::other
#  endif   // _RWSTD_NO_DEPENDENT_TEMPLATE

#  define _RWSTD_ALLOC_TYPE(Allocator, ignore)        \
          Allocator
#  define _RWSTD_VALUE_ALLOC(ignore, object, call)    \
          (object).allocator_type::call
#  define _RWSTD_VALUE_ALLOC_CAST(rvalue)             \
          _RWSTD_STATIC_CAST (allocator_type&, rvalue)
#else   // if !defined (_RWSTD_ALLOCATOR)
#  define _RWSTD_REBIND(from, to) \
          _STD::allocator_interface < from, to >
#  define _RWSTD_ALLOC_TYPE(Allocator, T)             \
          _RWSTD_REBIND (Allocator, T)
#  define _RWSTD_VALUE_ALLOC(Allocator, object, call) \
           Allocator (object).call
#  define _RWSTD_VALUE_ALLOC_CAST(rvalue)             \
          _C_value_alloc_type (rvalue)
#endif   // _RWSTD_ALLOCATOR


// for compilers that can't deal with template functions parametrized
// on the function's return type (as opposed to function arguments)
//
// NOTE: the spaces around type below are necessary to prevent errors
//       if `type' is a template-id and the preprocessor doesn't put
//       the spaces there automatically (GNU does, Sun does not)
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE

#  define _STD_HAS_FACET(type, arg)    _STD::has_facet < type >(arg)
#  define _HAS_FACET(type, arg)        has_facet < type >(arg)

#  define _STD_USE_FACET(type, arg)    _STD::use_facet < type >(arg)
#  define _USE_FACET(type, arg)        use_facet < type >(arg)

#  define _GET_TEMP_BUFFER(type, size) get_temporary_buffer < type >(size)
#else   // if defined (_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE)

#  define _STD_HAS_FACET(type, arg)    _STD::has_facet (arg, (type*)(0))
#  define _HAS_FACET(type, arg)        has_facet (arg, (type*)(0))

#  define _STD_USE_FACET(type, arg)    _STD::use_facet (arg, (type*)(0))
#  define _USE_FACET(type, arg)        use_facet (arg, (type*)(0))

#  define _GET_TEMP_BUFFER(type, size) get_temporary_buffer (size, (type*)0)
#endif   // _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE

// working around g++ 2.95.2 -fno-honor-std inability to use std::use_facet
#if    defined (__GNUG__) && __GNUC__ <= 2 && __GNUC_MINOR__ < 97 \
    && defined (_RWSTD_NO_HONOR_STD)
   // use_facet is introduced into namespace _RW via a using declaration
#  undef _STD_HAS_FACET
#  define _STD_HAS_FACET(type, arg)    _HAS_FACET (type, arg)

#  undef _STD_USE_FACET
#  define _STD_USE_FACET(type, arg)    _USE_FACET (type, arg)
#endif   // // __GNUG__ >= 2.97 || !_RWSTD_NO_HONOR_STD

// support for building the new locale (v.3)
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
#  ifndef _RWSTD_NO_HONOR_STD
#    define _V3_USE_FACET(type, arg)   _V3_LOCALE::use_facet< type >(arg)
#  else
#    define _V3_USE_FACET(type, arg)   use_facet< type >(arg)
#  endif
#else   // if defined (_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE)
#  ifndef _RWSTD_NO_HONOR_STD
#    define _V3_USE_FACET(type, arg)   _V3_LOCALE::use_facet(arg, (type*)(0))
#  else
#    define _V3_USE_FACET(type, arg)   use_facet(arg, (type*)(0))
#  endif
#endif // _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE


#ifndef _RWSTD_NO_NONCLASS_ARROW_RETURN
   // expected signature: "_TypeT* operator->()"
   // and/or:             "const _TypeT* operator->() const"
#  define _RWSTD_OPERATOR_ARROW(signature) signature { return &**this; }
#else
#  define _RWSTD_OPERATOR_ARROW(ignore)
#endif   // _RWSTD_NO_NONCLASS_ARROW_RETURN


// to prevent warnings about unused arguments
#define _RWSTD_UNUSED(arg)   ((void)&arg)


// allows all externs to be declared/defined only in headers
// and defined just by first #defining _RWSTD_DEFINE_EXTERNS
// and then #including the header in a .cpp file
#ifndef _RWSTD_DEFINE_EXTERNS
#  define _RWSTD_EXTERN(decl, ignore)   extern decl
#else
#  define _RWSTD_EXTERN(decl, value)    extern decl = value
#endif   // _RWSTD_DEFINE_EXTERNS


// allows static const integral or enum class members to be initialized
// inside the class and defined (w/o being initialized) outside
// of the class (as required by 9.4.2, p4)
#ifndef _RWSTD_NO_STATIC_CONST_MEMBER_INIT
#  define _RWSTD_STATIC_CONST(type, init)    static const type init
#  ifndef _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
#    define _RWSTD_DEFINE_STATIC_CONST(decl)   decl
#  else   // if defined (_RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION)
     // disable defintion of static const integral members
     // to work around compiler bugs such as those in MSVC
     // or Intel C++/Windows that cause multiple definition
     // linker errors (see PR #26562 and #30260)
#    define _RWSTD_DEFINE_STATIC_CONST(ignore)   /* empty */
#  endif   // _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
#else   // if defined (_RWSTD_NO_STATIC_CONST_MEMBER_INIT)
#  define _RWSTD_STATIC_CONST(ignore, init)  enum { init }
#  define _RWSTD_DEFINE_STATIC_CONST(ignore)   /* empty */
#endif   // _RWSTD_NO_STATIC_CONST_MEMBER_INIT

#ifndef _RWSTD_NO_STATICS_IN_TEMPLATE
#  define _RWSTD_INTERNAL   static
#else   // if defined (_RWSTD_NO_STATICS_IN_TEMPLATE)
  // symbols declared static cannot be referenced from
  // template (e.g., SunPro 5.3 -- see PR #25961)
#  define _RWSTD_INTERNAL   /* static */
#endif   // _RWSTD_NO_STATICS_IN_TEMPLATE


// Selection of vendor dependent "format" string argument to wcsftime()
#ifndef _RWSTD_NO_WCSFTIME
   // 7.24.5.1 of C99 - wcsftime()'s 3rd arg is const wchar* [restrict]
   //                   HP-UX 11 (and perhaps others) still uses const char*
#  ifndef _RWSTD_NO_WCSFTIME_WCHAR_T_FMAT
#     define _RWSTD_FMT_TYPE(arg)  const wchar_t* arg
#     define _RWSTD_FMT_ASSGN(str) L##str
#  else
#     define _RWSTD_FMT_TYPE(arg)  const char* arg
#     define _RWSTD_FMT_ASSGN(str) str
#  endif
#else   // if defined (_RWSTD_NO_WCSFTIME)
#  define _RWSTD_FMT_TYPE(arg)     const char* arg
#  define _RWSTD_FMT_ASSGN(str)    str
#endif // _RWSTD_NO_WCSFTIME


// _Iterator typedefs
// (note that you must use a semi-colon at the end of this macro)
#define _RWSTD_ITERATOR_TYPES(_Iterator)                               \
     typedef _TYPENAME _Iterator::difference_type difference_type;     \
     typedef _TYPENAME _Iterator::value_type value_type;               \
     typedef _TYPENAME _Iterator::pointer pointer;                     \
     typedef _TYPENAME _Iterator::reference reference;                 \
     typedef _TYPENAME _Iterator::iterator_category iterator_category

// helpers making working w/o iterator_traits transparent
#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC

#  define _RWSTD_VALUE_TYPE(iterT) \
       (_TYPENAME _STD::iterator_traits< iterT >::value_type*)0
#  define _RWSTD_DIFFERENCE_TYPE(iterT)   \
       (_TYPENAME _STD::iterator_traits< iterT >::difference_type*)0

#  if defined (SNI) || defined (__SUNPRO_CC) && __SUNPRO_CC <= 0x530
     // hacking around the inability of Siemens CDS++ and SunPro 5.3
     // to use the ctor syntax for type-dependent nested type names
#    define _RWSTD_ITERATOR_CATEGORY(iterT, ignore) \
         (const _TYPENAME _STD::iterator_traits< iterT >::iterator_category&) \
         (_STD::forward_iterator_tag ())

#  else
#    define _RWSTD_ITERATOR_CATEGORY(iterT, ignore) \
         _TYPENAME _STD::iterator_traits< iterT >::iterator_category ()
#  endif

#  define _RWSTD_REVERSE_ITERATOR(iterT, ign1, ign2, ign3) \
       _STD::reverse_iterator<iterT>

#else   // if defined (_RWSTD_NO_CLASS_PARTIAL_SPEC)

#  define _RWSTD_VALUE_TYPE(iterT) __value_type ((iterT*)0)
   // assume default ctor is defined and accessible
#  define _RWSTD_DIFFERENCE_TYPE(iterT)   \
       _STD::__distance_type (iterT ())
   // macro cannot use the default ctor to construct a temporary
   // with the type of the first argument since the default ctor
   // may not exist or be accessible (e.g., istream_iterator<>)
#  define _RWSTD_ITERATOR_CATEGORY(ignore, iter) \
       _STD::__iterator_category (iter)

#  define _RWSTD_REVERSE_ITERATOR(iterT, Ref, Ptr, Tag)         \
       _STD::reverse_iterator<iterT, _STD::Tag, value_type,     \
                              Ref, Ptr, difference_type>

#endif   // _RWSTD_NO_CLASS_PARTIAL_SPEC

// Use -D_RWSTDDEBUG to compile a version of the libraries to debug
// user code. This will perform pre- and post-condition checks but
// will produce larger code and run more slowly. This option affects
// the binary compatibility of generated code.

#if defined (_RWSTDDEBUG)
#  ifndef _RWSTD_NO_PRETTY_FUNCTION
     // gcc, HP aCC, and Intel C++ all support __PRETTY_FUNCTION__
#    define _RWSTD_ASSERT(expr)                                            \
     ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \
                                                __PRETTY_FUNCTION__))
#  elif !defined (_RWSTD_NO_FUNC)
     // C99 specifies the __func__ special identifier
#    define _RWSTD_ASSERT(expr)                                            \
     ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \
                                                __func__))
#  elif defined (__FUNCSIG__)
     // MSVC macro
#    define _RWSTD_ASSERT(expr)                                            \
     ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \
                                                __FUNCSIG__))
#  else   // if _RWSTD_NO_PRETTY_FUNCTION && _RWSTD_NO_FUNC
#    define _RWSTD_ASSERT(expr)   \
     ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, 0))
#  endif
#elif defined (_RWSTD_ASSUME)
#  define _RWSTD_ASSERT(expr)   _RWSTD_ASSUME (expr)
#else   //  if !defined (_RWSTDDEBUG)
#  define _RWSTD_ASSERT(ignore)   ((void)0)
#endif   // _RWSTDDEBUG

#ifndef _RWSTD_ASSUME
   // must be #defined after _RWSTD_ASSERT
#  define _RWSTD_ASSUME(expr)   _RWSTD_ASSERT (expr)
#endif   // _RWSTD_ASSUME

// compile-time assertion - asserts constant expressions during
// compilation with no runtime overhead; failed assertions are reported
// as compilation errors

_RWSTD_NAMESPACE (__rw) { 

// file may be #included from within an extern "C" block
extern "C++" {

template <bool __b>
struct __rw_compile_assert;

_RWSTD_SPECIALIZED_CLASS
struct __rw_compile_assert<true> { enum { _C_ok }; };

#define _RWSTD_COMPILE_ASSERT(const_expr) \
        ((void)_RW::__rw_compile_assert<(const_expr)>::_C_ok)

// called for failed assertions
void _RWSTD_EXPORT
__rw_assert_fail (const char*, const char*, int, const char*)
    _RWSTD_GNUC_ATTRIBUTE ((noreturn));

}   // extern "C++"

}   // namespace __rw


#define _RWSTD_STR(x)       #x
#define _RWSTD_STRSTR(x)    _RWSTD_STR(x)

#ifndef _RWSTD_NO_PRETTY_FUNCTION
#  define _RWSTD_FUNC(ignore)   _RWSTD_FILE_LINE, __PRETTY_FUNCTION__
#elif !defined (_RWSTD_NO_FUNC)
#  define _RWSTD_FUNC(ignore)   _RWSTD_FILE_LINE, __func__
#elif defined (__FUNCSIG__)
#  define _RWSTD_FUNC(ignore)   _RWSTD_FILE_LINE, __FUNCSIG__
#else
#  define _RWSTD_FUNC(name)     _RWSTD_FILE_LINE, name
#endif

#define _RWSTD_FILE_LINE   __FILE__ ":" _RWSTD_STRSTR (__LINE__)

#if !defined (__DECCXX_VER) || __DECCXX_VER > 60290024
#  define _RWSTD_REQUIRES(pred, args)   (pred) ? (void)0 : _RW::__rw_throw args
#else
   // working around a DEC cxx bug
#  define _RWSTD_REQUIRES(pred, args)   if (pred) ; else _RW::__rw_throw args
#endif


// function exception specification
#if    !defined (_RWSTD_NO_EXCEPTIONS) \
    && !defined (_RWSTD_NO_EXCEPTION_SPECIFICATION)
   // type_id_list is a possibly empty parenthesized list
   //of comma-separated type-id's
#  define _THROWS(type_id_list)   throw type_id_list
#else   // if _RWSTD_NO_EXCEPTIONS || _RWSTD_NO_EXCEPTION_SPECIFICATION
#  define _THROWS(ignore)         /* empty */
#endif   // !_RWSTD_NO_EXCEPTIONS && !_RWSTD_NO_EXCEPTION_SPECIFICATION


// function exception specification on extern "C" libc functions
#ifndef _RWSTD_NO_LIBC_EXCEPTION_SPEC
#  define _LIBC_THROWS(/* empty */)   throw ()
#else
#  define _LIBC_THROWS(/* empty */)   /* empty */
#endif   // _RWSTD_NO_LIBC_EXCEPTION_SPEC


// function exception specification on operator new
#ifndef _RWSTD_NO_EXCEPTION_SPECIFICATION_ON_NEW
#  define _NEW_THROWS(args)     _THROWS (args)
#else
#  define _NEW_THROWS(ignore)   /* empty */
#endif   // _RWSTD_NO_EXCEPTION_SPECIFICATION_ON_NEW


// for convenience
#if    !defined (_RWSTD_NO_CLASS_PARTIAL_SPEC)          \
    && (!defined (__SUNPRO_CC) || __SUNPRO_CC > 0x540)
#  define _DISTANCE(first, last, ignore) _STD::distance (first, last)
#else
// working around a SunPro 5.{3,4} bug (see PR #25958)
#  define _DISTANCE(first, last, type) _RW::__rw_distance (first, last, type())
#endif   // _RWSTD_NO_CLASS_PARTIAL_SPEC


// enable only in debug mode and only id partial class specialization
// is supported; prevent multiple definition of _RWSTD_NO_DEBUG_ITER
#if    defined(_RWSTDDEBUG) && !defined (_RWSTD_NO_CLASS_PARTIAL_SPEC) \
    && !defined (_RWSTD_NO_DEBUG_ITER) && !defined (SNI)
#  define _RWSTD_ASSERT_RANGE(first, last) \
      _RWSTD_ASSERT (_RW::__rw_valid_range (first, last))
#  define _RWSTD_ASSERT_IN_RANGE(it, first, last) \
      _RWSTD_ASSERT (_RW::__rw_in_range (it, first, last))
#  define _RWSTD_ASSERT_DEREF(it) \
      _RWSTD_ASSERT (_RW::__rw_dereferenceable (it))
#else
#  ifndef _RWSTD_NO_DEBUG_ITER
#    define  _RWSTD_NO_DEBUG_ITER
#  endif   // _RWSTD_NO_DEBUG_ITER

#  define _RWSTD_ASSERT_RANGE(ign1, ign2)          ((void)0)
#  define _RWSTD_ASSERT_IN_RANGE(ign1, ign2, ign3) ((void)0)
#  define _RWSTD_ASSERT_DEREF(ignore)              ((void)0)
#endif   // _RWSTDDEBUG && _RWSTD_NO_CLASS_PARTIAL_SPEC


// convenience macro to get the "real" iterator embedded in __rw_debug_iter<>
#ifndef _RWSTD_NO_DEBUG_ITER
#  define _ITER_BASE(it)   ((it).base ())
#else   // if defined (_RWSTD_NO_DEBUG_ITER)
#  define _ITER_BASE(it)   (it)
#endif   // _RWSTD_NO_DEBUG_ITER


// will use the deduced native type rather than the typedef to prevent
// conflicts caused by inconsistent definition of wint_t (gcc 2.95.2/AIX)
#ifndef _RWSTD_WINT_T
   // hardcode if wint_t is not available in <wchar.h>
   // used by std::traits and std::basic_[i|o]stream
#  define _RWSTD_WINT_T int
#endif   // _RWSTD_WINT_T


// used by std::traits and std::basic_[i|o]stream,
// required to be int by 21.1.3.1, p2
#define _RWSTD_INT_T int


// ssize_t is defined by POSIX.1
#ifndef _RWSTD_SSIZE_T
#  ifdef _WIN64
#    define _RWSTD_SSIZE_T SSIZE_T
#  else
#    define _RWSTD_SSIZE_T long
#  endif
#endif   // _RWSTD_SSIZE_T


#if defined(SNI)
#  define _RWSTD_USING_SNI(name) _USING(__SNI::name)
#  if defined(_RWSTD_STRICT_ANSI)
#    define fileno(p)       (int) ((p)->_file)
#  endif
#else
#  define _RWSTD_USING_SNI(ignore)    typedef void __rw_unused_type
#endif


#ifndef _RWSTD_TMPBUF_SIZE
#  define _RWSTD_TMPBUF_SIZE 4096
#endif

#ifndef _RWSTD_NO_STRTOLL
#  define _STRTOLL           strtoll
#else
   // libc has no strtoll, use strtol instead
#  define _STRTOLL           (_RWSTD_LONG_LONG)strtol
#endif   // _RWSTD_NO_STRTOLL


#ifndef _RWSTD_NO_STRTOULL
#  define _STRTOULL          strtoull
#else
   // libc has no strtoull, use strtoul instead
#  define _STRTOULL          (unsigned _RWSTD_LONG_LONG)strtoul
#endif   // _RWSTD_NO_STRTOULL


#if     defined (_RWSTD_INSTANTIATE_TEMPLATES)       \
    && !defined (_RWSTD_NO_EXPLICIT_INSTANTIATION)   \
    && !defined (_RWSTD_NO_INSTANTIATE)

#  define _RWSTD_INSTANTIATE(name, type)   \
       (   _RWSTD_INSTANTIATE ## name      \
        && _RWSTD_INSTANTIATE ## type      \
        && !_RWSTD_NO ## type)

#  define _RWSTD_INSTANTIATE_1(arg)          template arg
#  define _RWSTD_INSTANTIATE_2(a1, a2)       template a1, a2
#  define _RWSTD_INSTANTIATE_3(a1, a2, a3)   template a1, a2, a3

#  ifdef _RWSTD_NO_FUNCTION_EXPLICIT_INSTANTIATION
     // replace explicit function template instantiations with
     // declarations of explicit function template specializations
#    define _RWSTD_INSTANTIATE_FUN_1(ignore)             \
       typedef void __rw_unused_type
#    define _RWSTD_INSTANTIATE_FUN_2(ign1, ign2)         \
       typedef void __rw_unused_type
#    define _RWSTD_INSTANTIATE_FUN_3(ign1, ign2, ign3)   \
       typedef void __rw_unused_type
#  endif   // _RWSTD_NO_FUNCTION_EXPLICIT_INSTANTIATION
#elif     defined (_MSC_VER)                          \
      && !defined (_RWSTD_NO_EXPLICIT_INSTANTIATION)  \
      && !defined (_RWSTD_NO_INSTANTIATE)
   // disable warning C4231: nonstandard extension used :
   //         'extern' before template explicit instantiation
#  pragma warning (disable: 4231)

#  define _RWSTD_INSTANTIATE(ign1, type)   (!_RWSTD_NO ## type)

#  define _RWSTD_INSTANTIATE_1(arg)        extern template arg
#  define _RWSTD_INSTANTIATE_2(a1, a2)     extern template a1, a2
#  define _RWSTD_INSTANTIATE_3(a1, a2, a3) extern template a1, a2, a3
#elif !defined (_RWSTD_NO_EXTERN_TEMPLATE)
   // use the extern template extension to declare template
   // specializations that are explicitly instantiated in
   // source (.cpp) files
#  define _RWSTD_INSTANTIATE(ign1, type)   (!_RWSTD_NO ## type)
#  define _RWSTD_INSTANTIATE_1(arg)        extern template arg
#  define _RWSTD_INSTANTIATE_2(a1, a2)     extern template a1, a2
#  define _RWSTD_INSTANTIATE_3(a1, a2, a3) extern template a1, a2, a3

#  ifndef _RWSTD_NO_FUNCTION_EXPLICIT_INSTANTIATION
#    ifdef _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE
       // explicit instantiation of function templates enabled
       // but extern template declarations of function template
       // instantiations are disabled, use declarations of
       // explicit function template specializations instead
#      define _RWSTD_INSTANTIATE_FUN_1(arg)          template<> arg
#      define _RWSTD_INSTANTIATE_FUN_2(a1, a2)       template<> a1, a2
#      define _RWSTD_INSTANTIATE_FUN_3(a1, a2, a3)   template<> a1, a2, a3
#    endif   // _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE
#  else   // if defined (_RWSTD_NO_FUNCTION_EXPLICIT_INSTANTIATION)
     // function templates not explicitly instantiated

     // FIXME: this probably won't work since both class template
     // and (non-member) function templates are defined in the same
     // implementation (.c or .cc) files
#    define _RWSTD_INSTANTIATE_FUN_1(ignore)             \
       typedef void __rw_unused_type
#    define _RWSTD_INSTANTIATE_FUN_2(ign1, ign2)         \
       typedef void __rw_unused_type
#    define _RWSTD_INSTANTIATE_FUN_3(ign1, ign2, ign3)   \
       typedef void __rw_unused_type
#  endif   // _RWSTD_NO_FUNCTION_EXPLICIT_INSTANTIATION
#else
#  define _RWSTD_INSTANTIATE(ign1, ign2)         0
#  define _RWSTD_INSTANTIATE_1(ignore)           typedef void __rw_unused_type
#  define _RWSTD_INSTANTIATE_2(ign1, ign2)       typedef void __rw_unused_type
#  define _RWSTD_INSTANTIATE_3(ign1, ign2, ign3) typedef void __rw_unused_type
#endif   // _RWSTD_INSTANTIATE_TEMPLATES

#ifndef _RWSTD_INSTANTIATE_FUN_1
  // default to the same definition as _RWSTD_INSTANTIATE_{1,2,3}
#  define _RWSTD_INSTANTIATE_FUN_1(arg)        _RWSTD_INSTANTIATE_1 (arg)
#  define _RWSTD_INSTANTIATE_FUN_2(a1, a2)     _RWSTD_INSTANTIATE_2 (a1, a2)
#  define _RWSTD_INSTANTIATE_FUN_3(a1, a2, a3) _RWSTD_INSTANTIATE_3 (a1, a2, a3)
#endif   // _RWSTD_INSTANTIATE_FUN_1


#ifndef _RWSTD_NO_STD_UNCAUGHT_EXCEPTION
   // function defined in namespace std in compiler support library 
#  define _UNCAUGHT_EXCEPTION()   _STD::uncaught_exception()
#elif !defined (_RWSTD_NO_GLOBAL_UNCAUGHT_EXCEPTION)
   // function defined in global namespace in compiler support library 
#  define _UNCAUGHT_EXCEPTION()   uncaught_exception()
#else   // if NO_STD_UNCAUGHT_EXCEPTION && NO_GLOBAL_UNCAUGHT_EXCEPTION
   // function not defined in compiler support library 
#  define _UNCAUGHT_EXCEPTION()   true
#endif   // NO_STD_UNCAUGHT_EXCEPTION && NO_GLOBAL_UNCAUGHT_EXCEPTION


#ifdef _RWSTD_NO_EXTERN_TEMPLATE_BEFORE_DEFINITION
#  ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#    define _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#  endif   // _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#endif   // _RWSTD_NO_EXTERN_TEMPLATE_BEFORE_DEFINITION


// allows for efficient compilation of the library sources without
// support for implicit inclusion: only specializations explicitly
// instantiated in the library are available
#if     defined _RWSTD_NO_IMPLICIT_INCLUSION             \
    && (   !defined (_RWSTD_NO_TEMPLATE_DEFINITIONS)     \
        ||  defined (_RWSTD_NO_EXPLICIT_INSTANTIATION)   \
        ||  defined (_RWSTD_NO_IMPLICIT_INSTANTIATION)   \
        ||  defined (_RWSTD_NO_INSTANTIATE))

#  ifndef _RWSTD_LIB_SRC
     // this block is active when using (as opposed to compiling)
     // the library headers and sources

#    define _RWSTD_DEFINE_TEMPLATE(name)   !_RWSTD_NO ## name ## _DEFINITION
     // when implicit inclusion is not enabled, determines whether extern
     // template declarations for the corresponding explicit instantiation
     // directives for library templates may appear lexically before their
     // complete definitions (i.e., before the .cc file that corresponds
     // to each header) has been #included
#    ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
       // note that the _FIRST() and _LAST() macros cannot be #defined
       // in terms of the generic macro above because the name argument
       // would end up getting expanded too early (i.e., before the
       // token concatenation)
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore) 0
#      define _RWSTD_DEFINE_TEMPLATE_LAST(name)    \
              !_RWSTD_NO ## name ## _DEFINITION
#    else
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(name)   \
              !_RWSTD_NO ## name ## _DEFINITION
#      define _RWSTD_DEFINE_TEMPLATE_LAST(ignore)  0
#    endif
#  elif    !defined (_RWSTD_NO_EXPLICIT_INSTANTIATION) \
        && !defined (_RWSTD_NO_IMPLICIT_INSTANTIATION) \
        && !defined (_RWSTD_NO_EXPLICIT_INSTANTIATION_WITH_IMPLICIT_INCLUSION)
     // this block is active when compiling (as opposed to using)
     // the library headers and sources and implicit inclusion
     // is being emulated

#    define _RWSTD_DEFINE_TEMPLATE(name)   _RWSTD_INSTANTIATE ## name
#    ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore) 0
#      define _RWSTD_DEFINE_TEMPLATE_LAST(name)    _RWSTD_INSTANTIATE ## name
#    else
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(name)  _RWSTD_INSTANTIATE ## name
#      define _RWSTD_DEFINE_TEMPLATE_LAST(ignore) 0
#    endif   // _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#  else   // if no explicit instantiation (or with implicit inclusion)
     // this block is active when compiling (as opposed to using)
     // the library headers and sources and implicit inclusion is
     // not being emulated

#    define _RWSTD_DEFINE_TEMPLATE(ignore)         1
#    ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore)   0
#      define _RWSTD_DEFINE_TEMPLATE_LAST(ignore)    1
#    else   // if defined (_RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION)
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore)   1
#      define _RWSTD_DEFINE_TEMPLATE_LAST(ignore)    0
#    endif   // _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#  endif   // explicit instantiation (with implicit inclusion)
#else
#  ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_WITH_IMPLICIT_INCLUSION
     // when implicit inclusion is enabled or being emulated,
     // prevent out-of line non-member template functions or
     // out-of-line member functions of class templates (i.e.,
     // those defined in .c and .cc files) from being #included
     // in translation units
#    define _RWSTD_DEFINE_TEMPLATE(ignore)         0
#    define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore)   0
#    define _RWSTD_DEFINE_TEMPLATE_LAST(ignore)    0
#  else   // if defined (NO_EXPLICIT_INSTANTIATION_WITH_IMPLICIT_INCLUSION)
#    ifndef _RWSTD_LIB_SRC
#      define _RWSTD_DEFINE_TEMPLATE(ignore)         0
#      define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore)   0
#      define _RWSTD_DEFINE_TEMPLATE_LAST(ignore)    0
#    else   // if defined (_RWSTD_LIB_SRC)
#      define _RWSTD_DEFINE_TEMPLATE(name)   _RWSTD_INSTANTIATE ## name
#      ifndef _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#        define _RWSTD_DEFINE_TEMPLATE_FIRST(ignore) 0
#        define _RWSTD_DEFINE_TEMPLATE_LAST(name)    _RWSTD_INSTANTIATE ## name
#      else
#        define _RWSTD_DEFINE_TEMPLATE_FIRST(name)  _RWSTD_INSTANTIATE ## name
#        define _RWSTD_DEFINE_TEMPLATE_LAST(ignore) 0
#      endif   // _RWSTD_NO_EXPLICIT_INSTANTIATION_BEFORE_DEFINITION
#    endif   // _RWSTD_LIB_SRC
#  endif   // _RWSTD_NO_EXPLICIT_INSTANTIATION_WITH_IMPLICIT_INCLUSION
#endif


// define if neither wctrans() function declaration exists
// (temporary until a reliable wctrans_t test is put in place)
#if !defined (_RWSTD_NO_WCTRANS_T)
#  if defined (_RWSTD_NO_WCTRANS) && defined (_RWSTD_NO_TOWCTRANS)
#    define _RWSTD_NO_WCTRANS_T
#  endif
#endif   // _RWSTD_NO_WCTRANS_T


#ifndef _RWSTD_NO_SPECIALIZATION_ON_RETURN_TYPE
#  define _RWSTD_DUMMY_ARG(ignore)
#else
#  ifndef _RWSTD_NO_DUMMY_DEFAULT_ARG
     // use a dummy argument with a default value to simulate
     // the effect of a function template whose template argument
     // only appears in its return type (and not in the function
     // argument list)
#    define _RWSTD_DUMMY_ARG(T)   , T
#  else   // if defined (_RWSTD_NO_DUMMY_DEFAULT_ARG)
#    define _RWSTD_DUMMY_ARG(ignore)
#  endif   // _RWSTD_NO_DUMMY_DEFAULT_ARG
#endif   // _RWSTD_NO_SPECIALIZATION_ON_RETURN_TYPE

// helpers to make referring to the iterators easier
#define _RWSTD_ISTREAMBUF_ITER(T)   \
    _STD::istreambuf_iterator<T, _STD::char_traits<T > >

#define _RWSTD_OSTREAMBUF_ITER(T)   \
    _STD::ostreambuf_iterator<T, _STD::char_traits<T > >

// introduce namespace std so that "using namespace std;" always works
_RWSTD_NAMESPACE (std) { 
}   // namespace std


// each standard facet's static id member is explicitly instantiated
// (when extern template is available) or explicitly specialized
// (when member explicit specialization is implemented) for the char
// and wchar_t specializations to guarantee at most one definition
// of each in a program (in case the compiler doesn't provide such
// a guarantee; e.g., MSVC or VisualAge on AIX don't)
#ifdef _RWSTD_NO_EXTERN_TEMPLATE
#  ifdef _RWSTD_NO_EXPLICIT_MEMBER_SPECIALIZATION
#    ifndef _RWSTD_NO_SPECIALIZED_FACET_ID
#      define _RWSTD_NO_SPECIALIZED_FACET_ID
#    endif   // _RWSTD_NO_SPECIALIZED_FACET_ID
#  else
     // FIXME: handle the case when explicit member specialization
     // is not available (e.g., MSVC 6)
#  endif   // _RWSTD_NO_EXPLICIT_MEMBER_SPECIALIZATION
#else   // if !defined (_RWSTD_NO_EXTERN_TEMPLATE)
   // no need to explicitly specialize the members when extern
   // template is available since they are explicitly instantiated
   // in the library
#  ifndef _RWSTD_NO_SPECIALIZED_FACET_ID
#    define _RWSTD_NO_SPECIALIZED_FACET_ID
#  endif   // _RWSTD_NO_SPECIALIZED_FACET_ID
#endif   // _RWSTD_NO_EXTERN_TEMPLATE


// configuration for container class templates and their member
// function templates
#ifndef _RWSTD_NO_MEMBER_TEMPLATES
   // member function template definitions outside the body
   // of the parent container class template are enabled
#  define _RWSTD_ASSIGN_RANGE(first, last, tag)     \
          _C_assign_range (first, last, tag)
#  define _RWSTD_INSERT_RANGE(it, first, last, tag) \
          _C_insert_range (it, first, last, tag)
#else
   // when member function template definitions outside the body
   // of the parent container class template are disabled, they
   // are emulated using namespace-scope function templates
#  define _RWSTD_ASSIGN_RANGE(first, last, tag)       \
          __rw_assign_range (this, first, last, tag)
#  define _RWSTD_INSERT_RANGE(it, first, last, tag)   \
          __rw_insert_range (this, it, first, last, tag)
#endif   // _RWSTD_NO_MEMBER_TEMPLATES


#if defined (va_copy) || !defined _RWSTD_NO_VA_COPY
   // either va_copy() is already #defined (because <stdarg.h>
   // is already #included), or it was detected at configuration
#  define _RWSTD_VA_COPY(va_dst, va_src) \
          va_copy (va_dst, va_src)
#elif 2 < __GNUG__
   // no va_copy() macro detected, use gcc builtin
#  define _RWSTD_VA_COPY(va_dst, va_src) \
          __builtin_va_copy (va_dst, va_src)
#elif defined (_RWSTD_NO_VA_LIST_ARRAY)
   // va_list is not an array, use ordinary assignment to copy
#  define _RWSTD_VA_COPY(va_dst, va_src) \
          va_dst = va_src
#else   // if defined (_RWSTD_NO_VA_LIST_ARRAY)
   // va_list is an array, use memcpy()
#  define _RWSTD_VA_COPY(va_dst, va_src) \
          memcpy (va_dst, va_src, sizeof (va_list))
#endif   // _RWSTD_NO_VA_LIST_ARRAY

#endif   // _RWSTD_RW_DEFS_H_INCLUDED
