home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1997 May
/
Pcwk0597.iso
/
borland
/
cb
/
setup
/
cbuilder
/
data.z
/
STDCOMP.H
< prev
next >
Wrap
C/C++ Source or Header
|
1997-02-28
|
34KB
|
1,153 lines
#ifndef __STDRWCOMPILER_H__
#define __STDRWCOMPILER_H__ 1
/* $Revision: 8.3 $ */
/***************************************************************************
*
* Compiler and system related foibles and directives
*
* $Id: stdcomp.in,v 1.114 1995/10/03 17:26:32 smithey Exp $
*
***************************************************************************
*
* (c) Copyright 1994, 1995 Rogue Wave Software, Inc.
* ALL RIGHTS RESERVED
*
* The software and information contained herein are proprietary to, and
* comprise valuable trade secrets of, Rogue Wave Software, Inc., which
* intends to preserve as trade secrets such software and information.
* This software is furnished pursuant to a written license agreement and
* may be used, copied, transmitted, and stored only in accordance with
* the terms of such license and with the inclusion of the above copyright
* notice. This software and information or any other copies thereof may
* not be provided or otherwise made available to any other person.
*
* Notwithstanding any other lease or license that may pertain to, or
* accompany the delivery of, this computer software and information, the
* rights of the Government regarding its use, reproduction and disclosure
* are as set forth in Section 52.227-19 of the FARS Computer
* Software-Restricted Rights clause.
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7013.
* Contractor/Manufacturer is Rogue Wave Software, Inc.,
* P.O. Box 2328, Corvallis, Oregon 97339.
*
* This computer software and information is distributed with "restricted
* rights." Use, duplication or disclosure is subject to restrictions as
* set forth in NASA FAR SUP 18-52.227-79 (April 1985) "Commercial
* Computer Software-Restricted Rights (April 1985)." If the Clause at
* 18-52.227-74 "Rights in Data General" is specified in the contract,
* then the "Alternate III" clause applies.
*
**************************************************************************/
/****************************************************************
****************************************************************
* *
* U S E R T U N A B L E S E C T I O N *
* *
****************************************************************
****************************************************************/
/*
* This section has various preprocessor constants that can
* be set to reflect the properties of your compiler. For most
* compilers (particularly, MS-DOS compilers) there is no need
* to do anything --- most settings can be autodetected.
*
* For many Unix compilers you may have to tune the settings below.
* This is most easily done by running the "config" shell script
* which will try various test programs to discover the properties
* of your compiler.
*
* THIS IS FAR EASIER THAN SETTING THESE BY HAND!
*/
/*
* AT&T "CFRONT" USERS
*/
/*
* Most compilers have a built in "manifest constant".
* For the following compilers you must supply one by uncommenting
* an appropriate line:
*
* AT&T cfront V2.X: __ATT2__
* AT&T cfront V3.0: __ATT3__
*/
/* #define __ATT2__ 1 */
/* #define __ATT3__ 1 */
/**
** *** ALL USERS ***
**/
#define RWSTD_NOMSG 0x00
#define RWSTD_CATGETS 0x01
#define RWSTD_GETTEXT 0x02
#define RWSTD_DGETTEXT 0x03
/*
* Set RWSTD_MESSAGE to the type of messaging facility you want:
* RWSTD_NOMSG No messaging facility
* RWSTD_CATGETS Use catgets()
* RWSTD_GETTEXT Use gettext()
* RWSTD_DGETTEXT Use dgettext()
*/
#define RWSTD_MESSAGE RWSTD_NOMSG
#if !defined( __TURBOC__) && !defined(_MSC_VER)
/******************** COMPILER WORD SIZES, ETC ********************/
/*
* Uncomment the following and set to the number of decimal digits
* of precision for type double.
* If you do nothing, the default will be 16.
*/
/* #define RWSTD_DEFAULT_PRECISION 16 */
/*************** COMPILER QUIRKS AND LIMITATIONS ******************/
/*
* Uncomment the following if your compiler does not support
* exceptions.
*/
/* #define RWSTD_NO_EXCEPTIONS 1 */
/*
* Uncomment the following if your compiler does not support
* exceptions specifications.
*/
/* #define RWSTD_NO_EX_SPEC 1 */
/*
* Uncomment the following if your compiler does not support
* throwing of exceptions from a shared library.
*/
/* #define RWSTD_NO_THROW_WITH_SHARED 1 */
/*************************** TEMPLATES **********************************/
/*
* Uncomment the following if your compiler does not instantiates only those
* functions, member functions, classes or member classes that are
* required; i.e. your compiler instantiates things that your program
* doesn't actually use.
*/
/* #define RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1 */
/*
* Uncomment the following if your compiler does template
* instantiation at compile time.
*/
/* #define RWSTD_COMPILE_INSTANTIATE 1 */
/*************************** STRINGS ****************************/
/*
* Uncomment the following if your sprintf() does not
* return the size of the buffer as an int, as ANSI C requires.
*/
/* #define RWSTD_NO_ANSI_SPRINTF 1 */
/*
* Uncomment the following if your compiler does not have the
* ANSI C function memmove().
*/
/* #define RWSTD_NO_MEMMOVE 1 */
/****************** INTERNATIONALIZATION ************************/
/*
* Uncomment the following if your compiler does not support
* wide characters strings (e.g., functions wslen(), etc.).
*/
/* #define RWSTD_NO_WSTR 1 */
/*
* Uncomment the following if the type wchar_t is just a typedef,
* instead of a distinct type.
*/
/* #define RWSTD_NO_OVERLOAD_WCHAR 1 */
/*
* Uncomment the following if your compiler does not support
* the ANSI C locale facility fully, or if it does not support
* it at all (in particular, uncomment if setlocale(), strxform(),
* or strcoll() are not present or don't work).
*/
/* #define RWSTD_NO_LOCALE 1 */
/*
* Uncomment the following if your compiler does not have
* the %C directive to strftime().
*/
/* #define RWSTD_NO_STRFTIME_CAPC 1 */
/************************** TIME ********************************/
/*
* Uncomment the following if your compiler does not have global
* variables "_daylight", "_timezone", and "_tzname", or corresponding
* variables without a leading underscore (generally
* this is true only for pure Berkeley systems).
*/
/* #define RWSTD_NO_GLOBAL_TZ 1 */
/*
* Uncomment the following if your system supplies a global variable
* named "daylight" instead of the nominally more correct "_daylight".
*/
/* #define RWSTD_NO_LEADING_UNDERSCORE 1 */
/*
* If your system does not have global variables "daylight" and
* "timezone" (see directive immediately above) and does not have
* the Berkeley function gettimeofday() either, then uncomment
* the following:
*/
/* #define RWSTD_NO_GETTIMEOFDAY 1 */
/*
* If the struct tm defined in your <time.h> has extra member data
* "tm_zone" and "tm_gmtoff" (this is true for SunOs 4.X), then you
* should uncomment the following:
*/
/* #define RWSTD_STRUCT_TM_TZ 1 */
/************************** STANDARD LIBRARY ****************************/
/*
* Uncomment the following if your compiler does not support the bool type.
* This means that bool is not a unique type.
*/
/* #define RWSTD_NO_BOOL 1 */
/*
* Uncomment the following if your compiler does not support default
* templates. e.g:
* template<class T = int> ...
*/
/* #define RWSTD_NO_DEFAULT_TEMPLATES 1 */
/*
* Uncomment the following if your compiler doesn't support ~T()
* where T is a builtin.
*/
/* #define RWSTD_NO_DESTROY_BUILTIN 1 */
/*
* Uncomment the following if your compiler doesn't support ~T()
* where T is a non-builtin.
*/
/* #define RWSTD_NO_DESTROY_NONBUILTIN 1 */
/*
* If your compiler does not support complicated exceptions, such as
* throwing a domain_error exception, then uncomment the following:
*/
/* #define RWSTD_NO_COMPLICATED_EXCEPTIONS 1 */
/*
* Uncomment the following if your compiler cannot handle nested
* templates, or if you have to define the body of a class within
* the template (mostly sun compilers!)
*/
/* #define RWSTD_NO_NESTING_TEMPLATES 1 */
/*
* If your compiler does not support long double operators in iostreams, then
* uncomment the following:
*/
/* #define RWSTD_NO_STREAM_LONG_DOUBLE 1 */
/*
* Uncomment the following if your compiler does not support the
* mutable keyword
*/
/* #define RWSTD_NO_MUTABLE 1 */
/*
* If your compiler does not support namespaces, uncomment the following
*/
/* #define RWSTD_NO_NAMESPACE 1 */
/*
* Uncomment the following if your compiler does not support
* member template functions:
* template<class T> class C {
* template<class F> void foo();
* };
*/
/* #define RWSTD_NO_MEMBER_TEMPLATES 1 */
/*
* Uncomment the following if your compiler does not support
* member template classes:
* class C {
* template <class F> class N {};
* };
*/
/* #define RWSTD_NO_MEM_CLASS_TEMPLATES 1 */
/*
* If nontype-args are not allowed in function declarations, then uncomment
* the following. template<int i> void foo(char f[10][i])
*/
/* #define RWSTD_NO_NONTYPE_ARGS 1 */
/*
* If simple static initialization of const member variables is not allowed,
* uncomment the following
*/
/* #define RWSTD_NO_STI_SIMPLE 1 */
/*
* If complex static initialization of const member variables is not allowed,
* uncomment the following
*/
/* #define RWSTD_NO_STI_COMPLEX 1 */
/*
* If access to private types as return types outside the class
* is allowed, uncomment the following.
*/
/* #define RWSTD_NO_PRIV_RET 1 */
/*
* If nested static template variables cannot be defined outside the
* class, uncomment this.
*/
/* #define RWSTD_NO_STATIC_DEF 1 */
/*
* If static template variable definitions do not require initializers,
* uncomment this.
*/
/* #define RWSTD_NO_STATIC_DEF2 1 */
/*
* If templatized static data members do not work correctly, uncomment this.
*/
/* #define RWSTD_NO_STATIC_DEF3 1 */
/*
* If declaration of a non-member op such as | is not allowed with user
* defined types such as enums, uncomment the following
*/
/* #define RWSTD_NO_ENUM_OP 1 */
/*
* Are long mangled names handled correctly by your compiler/linker?
* If not, uncomment the following
*/
/* #define RWSTD_NO_LONG_NAME 1 */
/*
* Are complicated typedefs handled by your compiler?
* If not, uncomment the following
*/
/* #define RWSTD_NO_COMPLICATED_TYPEDEF 1 */
/*
* If your compiler does not support template template classes, then
* uncomment the following:
* template<class T, template<class U> allocator>
*/
/* #define RWSTD_NO_TEMPLATE_TEMPLATE 1 */
/* If your compiler does not treat wide chars as a distinct
type, uncomment the following */
/* #define RWSTD_NO_WIDE_CHAR 1 */
/*
* If your compiler does not handle typedef scoping correctly,
* then uncomment the following.
*/
/* #define RWSTD_NO_TYPEDEF_OVERLOAD 1 */
/*
* If your compiler does not function match on template base classes
* correctly, then uncomment the following.
*/
/* #define RWSTD_NO_BASE_CLASS_MATCH 1 */
/*
* If your compiler does not handle forward specializations
* correctly, then uncomment the following.
*/
/* #define RWSTD_NO_FORWARD_SPECIALIZATIONS 1 */
/*
* If your compiler does not handle template types as return types
* uncomment the following.
*/
/* #define RWSTD_NO_RET_TEMPLATE 1 */
/*
* If your compiler does not understand explicit constructors, uncomment
* the following.
*/
/* #define RWSTD_NO_EXPLICIT 1 */
/*
* If your compiler does not understand explicit argument qualification,
* uncomment the following.
*/
/* #define RWSTD_NO_EXPLICIT_ARG 1 */
/*
* If your compiler does not understand the typename keyword, uncomment
* the following.
*/
/* #define RWSTD_NO_TYPENAME 1 */
/*
* Does your compiler instantiate templates correctly? If not, uncomment
* the following
*/
/* #define RWSTD_NO_INSTANTIATION 1 */
/*
* Does your compiler instantiate typedefs of itself correctly?
* If not, uncomment the following
*/
/* #define RWSTD_NO_TYPEDEF_INST 1 */
/*
* Does your compiler instantiate templates with const types correctly?
* If not, uncomment the following
*/
/* #define RWSTD_NO_CONST_INST 1 */
/*
* Does your compiler assume trait typedefs are int? If not, uncomment
* the following
*/
/* #define RWSTD_NO_INT_TYPEDEF 1 */
/*
* Does your compiler give an ambiguity error on allocate()? If so, uncomment
* the following
*/
/* #define RWSTD_NO_ARG_MATCH 1 */
/*
* Does your compiler supply the new C++-style C headers? If not,
* uncomment the following
*/
/* #define RWSTD_NO_NEW_HEADER 1 */
/*
* does your compiler provide a placement new definition? If no,
* uncomment the following
*/
/* #define RWSTD_NO_NEW_DECL 1 */
/*
* does your compiler inherit typedefs in templates correctly? If no,
* uncomment the following
*/
/* #define RWSTD_NO_INHERITED_TYPEDEFS 1 */
/*
* Does your compiler have difficulty with constructors in a return
* statement? If so then uncomment the following.
*/
/* #define RWSTD_NO_CTOR_RETURN 1 */
/*
* Does your compiler have difficulty with undeclared friends? If so
* then uncomment the following.
*/
/* #define RWSTD_NO_UNDECLARED_FRIEND 1 */
/*
* Does your compiler have trouble with structures that lack a default
* constructor even when their instantiation is indirect? If so
* then uncomment the following.
*/
/* #define RWSTD_NO_MEMBER_WO_DEF_CTOR 1 */
/*
* Does your compiler allow un-initialized static members? If not
* then uncomment the following.
*/
/* #define RWSTD_NO_UNINITIALIZED_STATIC_DEF 1*/
/*
* Does your compiler allow member types as template parameters? If not
* then uncomment the following.
*/
/* #define RWSTD_NO_MEMBER_TYPE_TPARAM 1 */
/*
* Does your compiler dis-allow the use of 'static' in the out of line
* initialization of a static const member? If so then uncomment the
* following.
*/
/* #define RWSTD_NO_STATIC_MEM_DEF 1 */
/*
* Does your compiler not allow default constructor syntax on built in
* types. (e.g. int i = int();). If so then uncomment the following.
*/
/* #define RWSTD_NO_BUILTIN_CTOR 1 */
/* Does your compiler not allow defaults for parameters in function
* templates when the function parameter is a template parameter type.
* If so then uncomment the following.
*/
/* #define RWSTD_NO_DEFAULT_FOR_TPARAM 1 */
/* Does your compiler not allow name injection. For instance, does it
* allow member function specializations to be declared but not defined,
* so that the template versions of these functions will be used.
* If not, then uncomment the following.
*/
/* #define RWSTD_NO_NAME_INJECTION 1 */
/* Does your compiler have problems overloading on function template
* arguments that are partial specializations?
* If so, then uncomment the following.
*/
/* #define RWSTD_NO_PART_SPEC_OVERLOAD 1 */
/* Does your compiler vendor supply wctype.h?
* If not, then uncomment the following.
*/
/* #define RWSTD_NO_WCTYPE_H 1 */
/* Can your compiler handle explicit instantiations?
* If so, then uncomment the following.
*/
/* #define RWSTD_NO_EXPLICIT_INSTANTIATION 1 */
/*************************************************************************
**************************************************************************
** **
** From here on, it's pretty much boilerplate **
** and rarely requires any tuning. **
** **
**************************************************************************
**************************************************************************/
/************************ Cfront derivatives ******************************/
/* Any of these defines a cfront style compiler: */
#if defined(__ATT1__) || defined(__ATT2__) || defined(__ATT3__)
# define __ATT__ 1
#endif
#endif // !(__TURBOC__) && !(_MSC_VER)
#define STARTWRAP
#define ENDWRAP
/*************************** Symantec *******************************/
/*
* No longer supports Zortech. Must have Symantec V6.0 or greater.
*/
#if defined(__SC__)
/*************************** For Macs *******************************/
# if defined(macintosh)
# define RWSTD_CRLF_CONVENTION 1
# define RWSTD_NO_EXCEPTIONS 1
# define RWSTD_NO_GETTIMEOFDAY 1
# define RWSTD_NO_FRIEND_INLINE_DECL 1
# define RWSTD_NO_GLOBAL_TZ 1
# define RWSTD_NO_LOCALE 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# define RWSTD_NO_WSTR 1
/*************************** For PC's *******************************/
# else
# define __MSDOS__ 1
# define RWSTD_COMPILE_INSTANTIATE 1
# if (__SC__ <= 0x610)
# define RWSTD_NO_EXCEPTIONS 1
# define RWSTD_NO_GETTIMEOFDAY 1
# define RWSTD_NO_GLOBAL_TZ 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# define RWSTD_NO_WSTR 1
# endif
# endif
#endif
/********************** Borland's Turbo C++ **************************/
#if defined(__TURBOC__)
#define RWSTD_NO_LONG_HEADER_NAME 1
# if defined(__MSDOS__) && defined(_Windows)
# define __WIN16__ 1
# endif
/*
* For Borland, the __export keyword in a function declaration must
* come after the return type:
*/
# define RWSTD_TRAILING_RWEXPORT 1
/*
* Turbo and Borland won't inline code that contains
* "while" or "for" loops or that generates temporaries
* requiring destructors:
*/
# define RWSTD_NO_INLINED_WHILES 1
# define RWSTD_NO_INLINED_FORS 1
# define RWSTD_NO_INLINED_TEMP_DESTRUCTORS 1
/* The Borland compilers left out this definition: */
# define name2 _Paste2
/* Turbo C++ V1.00 forgets the segment address when passing
a class as a far reference if the class has not been defined. */
# if __TURBOC__ <= 0x0295
# define RWSTD_UNDEFINED_REFERENCE_BUG 1
# endif
# if __TURBOC__ >=0x200
/*
* In Borland C++ versions previous to 4.0, wchar_t is not a
* built-in type and there are no exceptions
*/
# if __TURBOC__ < 0x449
# define RWSTD_NO_EXCEPTIONS 1
# define RWSTD_NO_FRIEND_INLINE_DECL 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# endif
# if __TURBOC__ < 0x469
# define RWSTD_NO_BOOL 1
# define RWSTD_NO_DEFAULT_TEMPLATES 1
# define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES 1
# define RWSTD_NO_LOCALE 1
# define RWSTD_NO_MUTABLE 1
# define RWSTD_NO_NAMESPACE 1
# define RWSTD_NO_EXPLICIT 1
# define RWSTD_NO_EXPLICIT_ARG 1
# define RWSTD_NO_MEMBER_TEMPLATES 1
# define RWSTD_NO_MEM_CLASS_TEMPLATES 1
# define RWSTD_NO_NESTING_TEMPLATES 1
# define RWSTD_NO_NEW_HEADER 1
# define RWSTD_NO_NONTYPE_ARGS 1
# define RWSTD_NO_STATIC_DEF3 1
# define RWSTD_NO_STI_COMPLEX 1
# define RWSTD_NO_STI_SIMPLE 1
# define RWSTD_NO_PRIV_RET 1
# define RWSTD_NO_TEMPLATE_TEMPLATE 1
# define RWSTD_NO_DESTROY_BUILTIN 1
# define RWSTD_NO_TYPENAME 1
# define RWSTD_NO_CONST_INST 1
# define RWSTD_NO_LONG_NAME 1
# define RWSTD_NO_FORWARD_SPECIALIZATIONS 1
# define RWSTD_NO_PART_SPEC_OVERLOAD 1
# define RWSTD_NO_EXPLICIT_INSTANTIATION 1
#elif __TURBOC__ <= 0x520
/*
* Borland 5.0:
* implements namespaces, bool and mutable
*/
# define RWSTD_NO_DEFAULT_TEMPLATES 1
# define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES 1
# define RWSTD_NO_LOCALE 1
# define RWSTD_NO_EXPLICIT 1
# define RWSTD_NO_EXPLICIT_ARG 1
# define RWSTD_NO_MEMBER_TEMPLATES 1
# define RWSTD_NO_MEM_CLASS_TEMPLATES 1
# define RWSTD_NO_NESTING_TEMPLATES 1
# define RWSTD_NO_NEW_HEADER 1
# define RWSTD_NO_NONTYPE_ARGS 1
# define RWSTD_NO_STATIC_DEF3 1
# define RWSTD_NO_STI_COMPLEX 1
# define RWSTD_NO_STI_SIMPLE 1
# define RWSTD_NO_PRIV_RET 1
# define RWSTD_NO_TEMPLATE_TEMPLATE 1
# define RWSTD_NO_DESTROY_BUILTIN 1
# define RWSTD_NO_TYPENAME 1
# define RWSTD_NO_CONST_INST 1
# define RWSTD_NO_LONG_NAME 1
# define RWSTD_NO_COMPLICATED_TYPEDEF 1
# define RWSTD_NO_PART_SPEC_OVERLOAD 1
# define RWSTD_NO_SPEC_OVERLOAD 1
# define RWSTD_NO_EX_SPEC 1
# define RWSTD_BC5_ENUM_BUG 1
# endif
/*
* If the win32 API is available we can supply the WC string stuff
* for Borland (except for wcsxfrm for now)
*/
# ifdef __WIN32__
/* This is temporarily commented out until stdlib support this
partial wide string implementation */
/* # define RWSTD_SUPPLY_WSTR 1
# define RWSTD_NO_WCSXFRM 1 */
# define RWSTD_NO_WSTR 1
# else
# define RWSTD_NO_WSTR 1
# endif
# ifdef __MT__
# define RWSTD_MULTI_THREAD 1
# endif
# endif /* end post Turbo C++ V1.01 section */
#endif /* __TURBOC__ */
/************************ Microsoft C/C++ *****************************/
#if defined(_MSC_VER)
# define RWSTD_MSC_BACKEND 1
/* MSVC version 2.1 */
#if _MSC_VER < 901
# define RWSTD_NO_BASE_CLASS_MATCH 1
# define RWSTD_NO_CTOR_RETURN 1
# define RWSTD_NO_UNDECLARED_FRIEND 1
# define RWSTD_NO_MEMBER_WO_DEF_CTOR 1
# define RWSTD_NO_UNINITIALIZED_STATIC_DEF 1
# define RWSTD_NO_DEFAULT_FOR_TPARAM 1
# define RWSTD_NO_FORWARD_SPECIALIZATIONS 1
# define RWSTD_NO_MEMBER_TYPE_TPARAM 1
# define RWSTD_NO_NAME_INJECTION 1
# define RWSTD_NO_LONG_HEADER_NAME 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# define RWSTD_NO_WCTYPE_H 1
# define RWSTD_NO_PART_SPEC_OVERLOAD 1
# define RWSTD_NO_BOOL 1
# define RWSTD_NO_DEFAULT_TEMPLATES 1
# define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES 1
# define RWSTD_NO_LOCALE 1
# define RWSTD_NO_MUTABLE 1
# define RWSTD_NO_NAMESPACE 1
# define RWSTD_NO_EXPLICIT 1
# define RWSTD_NO_EXPLICIT_ARG 1
# define RWSTD_NO_MEMBER_TEMPLATES 1
# define RWSTD_NO_MEM_CLASS_TEMPLATES 1
# define RWSTD_NO_NESTING_TEMPLATES 1
# define RWSTD_NO_NEW_HEADER 1
# define RWSTD_NO_NONTYPE_ARGS 1
# define RWSTD_NO_STATIC_DEF 1
#ifdef _RWSTDDLL
# define RWSTD_NO_STATIC_DEF3 1
#endif
# define RWSTD_NO_STI_COMPLEX 1
# define RWSTD_NO_STI_SIMPLE 1
# define RWSTD_NO_PRIV_RET 1
# define RWSTD_NO_TEMPLATE_TEMPLATE 1
# define RWSTD_NO_TYPENAME 1
# define RWSTD_NO_BUILT_IN_CTOR 1
# define RWSTD_NO_NEW_DECL 1
# define RWSTD_COMPILE_INSTANTIATE 1
# define RWSTD_NO_DESTROY_NONBUILTIN 1
# define RWSTD_NO_STATIC_MEM_DEF 1
# define RWSTD_NO_TEMPLATE_SPECIALIZATION 1
# define RWSTD_NO_EXCEPTIONS 1
/* MSVC version 3.0 */
#elif _MSC_VER < 1001
# define RWSTD_NO_BOOL 1
# define RWSTD_NO_DEFAULT_TEMPLATES 1
# define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES 1
# define RWSTD_NO_LOCALE 1
# define RWSTD_NO_MUTABLE 1
# define RWSTD_NO_NAMESPACE 1
# define RWSTD_NO_EXPLICIT 1
# define RWSTD_NO_EXPLICIT_ARG 1
# define RWSTD_NO_MEMBER_TEMPLATES 1
# define RWSTD_NO_MEM_CLASS_TEMPLATES 1
# define RWSTD_NO_LONG_HEADER_NAME 1
# define RWSTD_NO_NEW_HEADER 1
# define RWSTD_NO_NONTYPE_ARGS 1
# define RWSTD_NO_STATIC_DEF 1
#ifdef _RWSTDDLL
# define RWSTD_NO_STATIC_DEF3 1
#endif
# define RWSTD_NO_STI_COMPLEX 1
# define RWSTD_NO_STI_SIMPLE 1
# define RWSTD_NO_PRIV_RET 1
# define RWSTD_NO_TEMPLATE_TEMPLATE 1
# define RWSTD_NO_TYPENAME 1
# define RWSTD_NO_BUILT_IN_CTOR 1
# define RWSTD_COMPILE_INSTANTIATE 1
# define RWSTD_NO_DESTROY_NONBUILTIN 1
# define RWSTD_NO_STATIC_MEM_DEF 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# define RWSTD_NO_WCTYPE_H 1
# define RWSTD_NO_OVERLOAD_FUNC_PTR 1
# define RWSTD_NO_TEMPLATE_SPECIALIZATION 1
# define RWSTD_NO_PART_SPEC_OVERLOAD 1
# define RWSTD_NO_CONST_INST 1
# define RWSTD_NO_EX_SPEC 1
#endif
# if defined(_MSDOS) && !defined(WIN32) && !defined(_WIN32)
# define __MSDOS__ 1
# if defined(_WINDOWS)
# define __WIN16__ 1
# endif
# endif
# if defined(WIN32) || defined(_WIN32)
# define __WIN32__
# define RWSTD_TOLOWER_SIGN_EXTENDS_RESULT_BUG 1
# else
# define RWSTD_NO_WSTR 1
# endif
# ifdef _RWBUILDDLL
# define __DLL__ 1
# endif
# ifdef _M_I86SM
# define __SMALL__ 1
# endif
# ifdef _M_I86CM
# define __COMPACT__ 1
# endif
# ifdef _M_I86MM
# define __MEDIUM__ 1
# endif
# ifdef _M_I86LM
# define __LARGE__ 1
# endif
# ifdef _MT
# define RWSTD_MULTI_THREAD 1
# endif
#endif
/********************** Metaware High C/C++ ***************************/
#if defined(__HIGHC__)
# define RWSTD_NO_OVERLOAD_WCHAR 1
# if defined(_MSDOS)
# define __MSDOS__ 1
# define RWSTD_HIGHC_INLINE_BUG 1
# define RWSTD_NO_EXCEPTIONS 1
# define RWSTD_NO_WSTR 1
# endif
# if defined(_OS2)
# undef __OS2__
# define __OS2__ 1
# define RWSTD_SUPPLY_WSTR 1
# define RWSTD_NO_WCSXFRM 1
# ifdef _REENTRANT
# define RWSTD_MULTI_THREAD 1
# endif
# endif
# if defined(_MSNT)
# undef __WIN32__
# define __WIN32__ 1
# define RWSTD_NO_WSTR 1
# if defined(_REENTRANT) || defined(_MT)
# define RWSTD_MULTI_THREAD 1
# endif
# endif
#endif /* __HIGHC__ */
/************************** MPW *************************************/
#if defined(applec)
# define RWSTD_BROKEN_TOKEN_PASTE 1
# define RWSTD_REVERSED_CR_AND_LF 1
# define RWSTD_NATIVE_EXTENDED 1
# define RWSTD_NO_ACCESS_ADJUSTMENT 1
# define RWSTD_NO_EXCEPTIONS 1
# define RWSTD_NO_GETTIMEOFDAY 1
# define RWSTD_NO_GLOBAL_TZ 1
# define RWSTD_NO_LEADING_UNDERSCORE 1
# define RWSTD_NO_OSTR_REF_CAST 1
# define RWSTD_NO_OVERLOAD_WCHAR 1
# define RWSTD_NO_WSTR 1
#endif
/********************** IBM C/Set++ *********************************/
#ifdef __IBMCPP__
# define RWSTD_NO_WSTR 1
# ifdef __MULTI__
# define RWSTD_MULTI_THREAD 1
# endif
#endif
/********************** IBM xlC *********************************/
#if defined(_AIX) && !defined(unix)
#define unix 1
#endif
/********************** Miscellaneous *********************************/
/*
* These compilers instantiate templates at compile-time;
* others at link-time.
*/
#if defined(__TURBOC__) || defined(__HIGHC__) || defined(__xlC__) || defined(__GNUG__) || defined(__WATCOMC__) || defined(__IBMCPP__) || defined(__os_cplusplus)
# define RWSTD_COMPILE_INSTANTIATE 1
#endif
/* No Pi for these compilers: */
#if defined(RWSTD_MSC_BACKEND) || defined(__OREGON__) || defined(__HIGHC__) || defined(applec) || defined(CII) || defined(__WATCOMC__)
# ifndef M_PI
# define M_PI 3.14159265358979323846
# endif
#endif
/*
* Only Sun defines strftime("%C", ...)
*/
#if !defined(RWSTD_NO_STRFTIME_CAPC) && !defined(sun)
#define RWSTD_NO_STRFTIME_CAPC 1
#endif
/********************** Environment *********************************/
/*
* This is the section for setting things which depend on the properties
* of the operating systems rather than specific compilers. It follows
* the compiler section so we have the chance to rationalize the different
* preprocessor constants (e.g. _MSDOS vs. __MSDOS__, _M_I86LM vs. __LARGE__)
*/
#ifndef RWSTD_DEFAULT_PRECISION
# define RWSTD_DEFAULT_PRECISION 16 /* Assume standard IEEE format */
#endif
/*
* Most (but not all) non-unix systems convert new line to carriage
* return / line feed on output:
*/
#if defined(__MSDOS__) || defined(__OS2__) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__)
# define RWSTD_CRLF_CONVENTION 1
#endif
/*
** Miscellaneous workarounds.
*/
#ifdef RWSTD_NO_BOOL
typedef int bool;
#define true 1
#define false 0
#endif
#ifdef RWSTD_NO_TYPENAME
#define typename
#endif
#ifdef RWSTD_NO_EXPLICIT
#define explicit
#endif
#ifndef RWSTD_NO_INLINED_WHILES
#define RWSTD_WHILE_INLINE inline
#endif
#ifndef RWSTD_NO_INLINED_FORS
#define RWSTD_FOR_INLINE inline
#endif
#ifndef RWSTD_NO_INLINED_TEMP_DESTRUCTORS
#define RWSTD_TEMP_DTOR_INLINE inline
#endif
#ifdef RWSTD_NO_MEMBER_WO_DEF_CTOR
#define RWSTD_NO_CONST_INST
#endif
#define RWSTD_MB_CUR_MAX 16 //??? Need to find absolute maximum for this
#include <compnent.h>
//
// Define a generic macro for throw. To be used as in the following:
//
// RWSTD_THROW(i < j && j < k, out_of_range, "j is out of range!");
//
// ^ predicate ^ exception ^ message
//
// literally, if (predicate) throw exception(message)
//
#ifdef RWSTD_NO_EXCEPTIONS
//
// If we don't have exceptions, then we'll use assert.
// We don't allow them to turn off the assert() in which such
// a thrown exception would result.
//
#ifdef NDEBUG
#define __RW_NDEBUG
#undef NDEBUG
#endif
#ifndef RWSTD_NO_NEW_HEADER
#include <cassert>
#else
#include <assert.h>
#endif
#define RWSTD_THROW(PRED,EXC,MESG) assert(!(PRED))
//
// We must also turn off expansion of assert() if that's what the user expects.
//
#ifdef __RW_NDEBUG
#define NDEBUG
#undef __RW_NDEBUG
#endif
#else /*!RWSTD_NO_EXCEPTIONS*/
//
// We must check to see if we can use <stdexcept> or just a string.
//
#ifdef RW_STD_EXCEPT
#define RWSTD_THROW(PRED,EXC,MESG) (PRED) ? throw EXC(MESG) : 0
#else
#define RWSTD_THROW(PRED,EXC,MESG) (PRED) ? throw (MESG) : 0
#endif
#endif /*RWSTD_NO_EXCEPTIONS*/
//
// Define two generic throw specification macros. One to illustrate
// the exceptions that a function can throw and the other to indicate
// that a function doesn't throw any exceptions.
//
// RWSTD_THROW_SPEC(ExceptionList)
//
// RWSTD_THROW_SPEC_NULL
//
// Owing to the face that the first macro must be able to take a
// variable number of arguments, we must simulate this by always
// passing the exceptions in parentheses; i.e.
//
// void f () RWSTD_THROW_SPEC((out_of_range));
// void g () RWSTD_THROW_SPEC((domain_error, invalid_argument));
// void h () RWSTD_THROW_SPEC((out_of_range, invalid_argument, length_error));
//
#if defined(RWSTD_NO_EXCEPTIONS) || defined(RWSTD_NO_EX_SPEC)
#define RWSTD_THROW_SPEC(EXCEPTIONS) /**/
#define RWSTD_THROW_SPEC_NULL /**/
#else
#ifdef RW_STD_EXCEPT
//
// RWSTD_THROW will use the exceptions in <stdexcept>
//
#define RWSTD_THROW_SPEC(ExceptionList) throw ExceptionList
#define RWSTD_THROW_SPEC_NULL throw()
#else
//
// RWSTD_THROW will only throw const char *
//
#define RWSTD_THROW_SPEC(ExceptionList) throw(const char *)
#define RWSTD_THROW_SPEC_NULL throw()
#endif
#endif /*RWSTD_NO_EXCEPTIONS||RWSTD_NO_EX_SPEC*/
#endif /*__RWSTDCOMPILER_H__*/