/***************************************************************************
 *
 * _config-msvcrt.h - Microsoft Visual C++ run-time library
 *                    configuration definitions
 *
 * 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-2007 Rogue Wave Software, Inc.
 * 
 **************************************************************************/

#if _MSC_VER <= 1300   // MSVC <= 7.0
#  define _RWSTD_EXCEPTION_HANDLER_IN_STD
#  define _RWSTD_NO_STATIC_DEF3
#endif   // MSVC <= 7.0

   // enable the <cxxx> form of libc headers
   // we can only use the rw version in include/ansi
#ifndef _RWSTD_NO_PURE_C_HEADERS
#  define _RWSTD_NO_PURE_C_HEADERS
#endif   // _RWSTD_NO_PURE_C_HEADERS

#if defined _RWSTD_NO_NEW_HEADER
#  undef _RWSTD_NO_NEW_HEADER
#endif   // _RWSTD_NO_NEW_HEADER

   // our <cxxx> libc headers put the libc functions in namespace std
#ifdef _RWSTD_NO_LIBC_IN_STD
#  undef _RWSTD_NO_LIBC_IN_STD
#endif   // _RWSTD_NO_LIBC_IN_STD

#ifndef _RWSTD_NO_DEPRECATED_C_HEADERS
#  define _RWSTD_NO_DEPRECATED_C_HEADERS
#endif   // _RWSTD_NO_DEPRECATED_C_HEADERS

#ifndef _RWSTD_NO_WCSTOK
// MSVC CRT has incorrect prototype of the wcstok()
#  define _RWSTD_NO_WCSTOK
#endif   // _RWSTD_NO_WCSTOK

#ifndef _RWSTD_NO_WCSTOK_IN_LIBC
#  define _RWSTD_NO_WCSTOK_IN_LIBC
#endif   // _RWSTD_NO_WCSTOK_IN_LIBC

   // operator new and delete is not reliably replaceable across
   // shared library boundaries, which includes the shared library
   // version of the language support library
#define _RWSTD_NO_REPLACEABLE_NEW_DELETE

   // names of (most) extern "C" libc symbols begin with an underscore
#define _RWSTD_LIBC_SYM(name)   _ ## name

#ifdef _DLL
   // the _DLL macro is defined by the compiler when building a shared
   // library, i.e., in response to either of the /MD and /MDd options
   // _RWSTD_DLLIMPORT is used when declaring libc functions that need
   // to be "imported" into the shared library
#  define _RWSTD_DLLIMPORT   __declspec (dllimport)
#endif   // _DLL

#ifndef _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
     // both MSVC 7.x and Intel C++/Windows allow "inline" initializers
     // for static const integral data members but out-of-line definitions
     // cause multiply defined symbol errors (see PR #26562 and #30260)
     // disable their definitions in source files (the members are still
     // declared)
#  define _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
#endif   // _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION

   // enable iostream and locale support for long long integers
#if _MSC_VER <= 1300 || defined (_RWSTD_NO_LONG_LONG)
#  define _RWSTD_LONG_LONG __int64
#endif   // _MSC_VER <= 1300 || _RWSTD_NO_LONG_LONG

#if defined (WIN32) && !defined(_WIN32)
#  define _WIN32
#endif

#if defined (_MT) && !defined (_RWSTD_NO_REENTRANT)
#  ifndef _RWSTD_REENTRANT
#    define _RWSTD_REENTRANT 1
#  endif   // _RWSTD_REENTRANT

#  ifndef _RWSTD_NO_TLS
       // thread-local stoprage declaration specifier
#    ifndef _RWSTD_THREAD
#      define _RWSTD_THREAD   __declspec (thread)
#    endif   // _RWSTD_THREAD
#  endif   // _RWSTD_NO_TLS
#else   // if !defined (_MT) || defined (_RWSTD_NO_REENTRANT)
#  ifdef _RWSTD_REENTRANT
#    undef _RWSTD_REENTRANT
#  endif   // _RWSTD_REENTRANT
#  ifndef _RWSTD_THREAD
#    define _RWSTD_THREAD   /* empty */
#  endif   // _RWSTD_THREAD
#endif   // _MT && !_RWSTD_NO_REENTRANT

#if defined (_CPPRTTI)
     // override in case library was configured with -GR-
     // (i.e., with RTTI disabled)
#  undef _RWSTD_NO_DYNAMIC_CAST
#elif !defined (_RWSTD_NO_DYNAMIC_CAST)
     // override in case library was configured with -GR
     // (i.e., with RTTI enabled)
#  define _RWSTD_NO_DYNAMIC_CAST
#endif   // _CPPRTTI

#ifndef _NATIVE_WCHAR_T_DEFINED
   // define wchar_t if it is not a keyword recognized by the compiler
   // (use the /Zc:wchar_t compiler option to enable wchar_t as a keyword)
typedef unsigned short wchar_t;

#endif   // _NATIVE_WCHAR_T_DEFINED

#ifndef _CPPUNWIND
   // disable exceptions when the macro _CPPUNWIND
   // is not #deined by the compiler, e.g., when
   // the /GX- option is used
#  ifndef _RWSTD_NO_EXCEPTIONS
#    define _RWSTD_NO_EXCEPTIONS
#  endif   // _RWSTD_NO_EXCEPTIONS
#endif

#if _RWSTD_VER_MAJOR < 5 && defined (_DLL)
   // defined for binary compatibility with stdcxx 4.1.x
   // (for all versions of MSVC and Intel C++)
#  define _RWSTD_NO_BAD_CAST_ASSIGNMENT
#  define _RWSTD_NO_BAD_CAST_COPY_CTOR
#  define _RWSTD_NO_BAD_CAST_DTOR
#  define _RWSTD_NO_BAD_TYPEID_ASSIGNMENT
#  define _RWSTD_NO_BAD_TYPEID_COPY_CTOR
#  define _RWSTD_NO_BAD_TYPEID_DTOR
#  define _RWSTD_NO_EXCEPTION_ASSIGNMENT
#  define _RWSTD_NO_EXCEPTION_COPY_CTOR
#  define _RWSTD_NO_EXCEPTION_DEFAULT_CTOR
#  define _RWSTD_NO_EXCEPTION_DTOR
#  define _RWSTD_NO_EXCEPTION_WHAT
#endif   // _RWSTD_VER_MAJOR < 5 && _DLL
