#ifndef __STD_RWCOMPILER_H__ #define __STD_RWCOMPILER_H__ 1 #ifndef __cplusplus #error Must use C++ for STDCOMP.H #endif /*************************************************************************** * * Compiler and system related foibles and directives * *************************************************************************** * * Copyright (c) 1994-1999 Rogue Wave Software, Inc. All Rights Reserved. * * This computer software is owned by Rogue Wave Software, Inc. and is * protected by U.S. copyright laws and other laws and by international * treaties. This computer software is furnished by Rogue Wave Software, * Inc. 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 * computer software or any other copies thereof may not be provided or * otherwise made available to any other person. * * U.S. Government Restricted Rights. This computer software is provided * with Restricted Rights. 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 or subparagraphs (c) (1) and (2) of the * Commercial Computer Software – Restricted Rights at 48 CFR 52.227-19, * as applicable. Manufacturer is Rogue Wave Software, Inc., 5500 * Flatiron Parkway, Boulder, Colorado 80301 USA. * **************************************************************************/ /**************************************************************** **************************************************************** * * * U S E R T U N A B L E S E C T I O N * * * **************************************************************** ****************************************************************/ // Library version number // #define _RWSTD_VER 0x020101 // AABBCC // | | | // | | +-- CC = Maintenance number // | +---- BB = Minor Release number // +------ AA = Major Release number // // Note that former version numbers were of the form: 0xAABC // i.e., they showed only one digit each for Minor and Maintenance. // e.g. "0x0203" would be "0x020003" in the new, extended scheme. /* * 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) && !defined(_OS2) /******************** OPTIONAL LIBRARY FEATURES********************/ /* turned off by default */ /* Uncomment the following if you wish for bounds checking to be * performed for operator[] for deque and vector */ /* #define _RWSTD_BOUNDS_CHECKING 1 */ /* Uncomment the following if you wish to use localized error messages */ /* #define _RWSTD_LOCALIZED_ERRORS 1 */ /******************** 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 not allow an unused * T *operator-> in a template when T is of non-class type. */ /* #define _RWSTD_NO_NONCLASS_ARROW_RETURN 1 */ /* * Uncomment the following if your compiler does not support the new syntax * for functions that are templatized only on the return type, e.g. * template T func (void); // Declare the function template * int my_int = func(); // Call the function */ /* #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 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 */ /* * Uncomment the following if your compiler's stdio.h does not define * an fpos_t type. */ /* #define _RWSTD_NO_FPOS_T 1 */ /* * Uncomment the following if your compiler's stdlib.h does not provide * an ldiv function. */ /* #define _RWSTD_NO_LDIV 1 */ /* * Uncomment the following if your compiler's header does not * define a bad_cast exception type. */ /* #define _RWSTD_NO_BAD_CAST 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 your compiler's support for * wide character strings does not include support for any * of the following: wctomb(), mbtowc(), iswspace(), wmemset(), * wmemchr() and wcsstr(). */ /* #define _RWSTD_NOT_ALL_WSTR_CFUNCTIONS 1 */ /* * Uncomment the following your compiler does not define type wint_t * in either wchar.h or wctype.h. */ /* #define _RWSTD_NO_WINT_TYPE 1 */ /* * Uncomment the following if your compiler does not provide wide * character functions swscanf and swprintf. */ /* #define _RWSTD_NO_SWPRINTF 1 */ /* * Uncomment the following if your compiler cannot distinguish wchar_t from * other integer types in template argument lists. */ /* #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 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 */ /* Uncomment the following if you have a Solaris platform that * supports threads. (We choose this if you have it, in * preference to other thread packages. You may prefer a * different package.) */ /* #define _RWSTD_SOLARIS_THREADS 1 */ /* Uncomment the following if you have a threads package which * meets an early Posix draft, and you don't have Solaris threads. */ /* #define _RWSTD_POSIX_THREADS 1 */ /* As above, if you have threads which meet * the Posix Draft 10 threads description. If you define this, * then you must also define RW_POSIX_THREADS */ /* #define _RWSTD_POSIX_D10_THREADS 1 */ /* Uncomment the following if pthread_mutexattr_default is * provided by your threads package. The posix standard (draft 10) * does not require a pthreads package to provide this value. */ /* #define _RWSTD_MUTEXATTR_DEFAULT 1 */ /* Uncomment the following if you have no threads, or your package doesn't * meet our expectations for header and function names. */ /* #define _RWSTD_NO_THREADS 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 simple * default templates. e.g: * template ... */ /* #define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES 1 */ /* * Uncomment the following if your compiler does not support complex * default templates. e.g: * template > ... */ /* #define _RWSTD_NO_COMPLEX_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 C { * template void foo(); * }; */ /* #define _RWSTD_NO_MEMBER_TEMPLATES 1 */ /* * Uncomment the following if your compiler does not support * member template classes: * class C { * template class N {}; * }; */ /* #define _RWSTD_NO_MEM_CLASS_TEMPLATES 1 */ /* * Uncomment the following if your compiler does not support declaring a * template function to be a friend: * class C { * template friend void foo (T); * }; */ /* #define _RWSTD_NO_FRIEND_TEMPLATES 1 */ /* * If nontype-args are not allowed in function declarations, then uncomment * the following. template 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 simple static initialization of const member variables in a * template is not allowed, then uncomment the following */ /* #define _RWSTD_NO_STI_TEMPLATE 1 */ /* * If FLT_ROUNDS is a constant and not a variable, * uncomment the following */ /* #define _RWSTD_FLT_ROUNDS_IS_CONSTANT 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 */ /* * 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 */ /* * Are embedded typedefs supported? * If not, uncomment the following */ /* #define _RWSTD_NO_EMBEDDED_TYPEDEF 1 */ /* * If your compiler does not support template template classes, then * uncomment the following: * template allocator> */ /* #define _RWSTD_NO_TEMPLATE_TEMPLATE 1 */ /* * If your compiler does not have a wchar_t type, uncomment * the following */ /* #define _RWSTD_NO_WIDE_CHAR 1 */ /* * If your compiler does not have a wchar.h header file, uncomment * the following */ /* #define _RWSTD_NO_WCHAR_H 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 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 unDEFINED friends? If so * then uncomment the following. */ /* #define _RWSTD_NO_UNDEFINED_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 not, then uncomment the following. */ /* #define _RWSTD_NO_EXPLICIT_INSTANTIATION 1 */ /* Can your compiler handle explicit instantiations of * function templates? * If not, then uncomment the following. */ /* #define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION 1 */ /* If your compiler requires the non-standard * include file , then uncomment the * following. */ /* #define _RWSTD_REQUIRES_IEEEFP 1 */ /* If your compiler typedefs long double to * double, then uncomment the following. */ /* #define _RWSTD_NO_LONGDOUBLE 1 */ /* If your compiler does not support static_cast<>, then uncomment the following. */ /* #define _RWSTD_NO_STATIC_CAST 1 */ /* If your compiler doesn't support default values for const template * reference arguements, then uncomment the following. */ /* #define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG 1 */ /* If your compiler does not support using a template argument as a * default parameter, then uncomment the following. */ /* #define _RWSTD_NO_DEFAULT_TEMPLATE_ARGS 1 */ /* If your compiler does not support wide string null being * defined as L"" but will work correctly when defined as L"\0", * then uncomment the following. */ /* #define _RWSTD_WIDE_STRING_NULL_PROBLEM 1 */ /* If your compiler does not support partial specialisation * of template function, then uncomment the following. */ /* #define _RWSTD_NO_FUNC_PARTIAL_SPEC 1 */ /* If your compiler does not support partial specialisation * of template classes with default parameters, then uncomment * the following. */ /* #define _RWSTD_NO_CLASS_PARTIAL_SPEC 1 */ /* If your compiler does not support overload of template function, * then uncomment the following. */ /* #define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1 */ /* If your compiler has difficulties with multi dimensional arrays of * container classes, then uncomment the following. */ /* #define _RWSTD_NO_MULTI_DIM_ARRAY 1 */ /* If your compiler does not provide a catopen/catgets style message * catalog defined in header , then uncomment the following. */ /* #define _RWSTD_NO_CATOPEN_CATGETS 1 */ /* If the exception handler functions are located in namespace std, * then uncomment the following. */ /* #define _RWSTD_EXCEPTION_HANDLER_IN_STD 1 */ /* If your compiler has the class bad_alloc defined in new.h then * uncomment the following. */ /* #define _RWSTD_BAD_ALLOC_DEFINED 1 */ /* If your compiler has the exception classes already defined * then uncomment the following. */ /* #define _RWSTD_EXCEPTION_PREDEFINED 1 */ /* If your compiler has the class exception in its own exception * file then uncomment the following. */ /* #define _RWSTD_EXCEPTION_DEFINED 1 */ /* If your compiler has the class bad_exception in its own exception * file then uncomment the following. */ /* #define _RWSTD_BAD_EXCEPTION_DEFINED 1 */ /* If your compiler will not accept opterator::new[] * then uncomment the following. */ /* #define _RWSTD_NO_NEW_BRACKETS 1 */ /* If your compiler try to instantiate member function when * creating variable of a class. */ /* #define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION 1 */ /* If your 'C' library does not provide overloads for the pow function * (i.e. pow(float,float), and pow(long double, long double) if appropriate), * then uncommment the following. */ /* #define _RWSTD_NO_OVERLOAD_C_POW 1 */ /* If your compiler does not have an mbstate_t type then uncomment * the following. */ /* #define _RWSTD_NO_MBSTATE_T 1 */ /* If your compiler does not support the new template specialization * syntax then umcomment the following */ /* #define _RWSTD_NO_NEW_TEMPLATE_SYNTAX 1 */ /* If your compiler does not a have a throw specification on operator new * then uncomment the following. */ /* #define _RWSTD_NO_THROW_SPEC_ON_NEW 1 */ /* * Uncomment this for EDG 2.36 */ /* #define __NO_EDG_EXCEPTION_CLASSES=1 */ /* * If you don't want to use RW extensions (to file streams) please * uncomment this. See documentation for a detailed description about * the class wise extensions added to the library. */ /* #define _RWSTD_NO_EXTENSION 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) &&!(__OS2__) #define STARTWRAP #define ENDWRAP /********************** 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 loops or that * generates temporaries requiring destructors or that has an exception * specification: */ # define _RWSTD_NO_TRICKY_INLINES 1 /* 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 /* * Borland 5.0 - 5.02: * implements namespaces, bool and _MUTABLE */ # if __TURBOC__ < 0x469 # error Only Borland C++ versions 5.0 and better are supported. # else /* if error then #define RWBC5_INCLUDE to full path of the compiler's * INCLUDE directory. */ # if 0 // Weird include macro not needed. # ifndef RWBC5_INCLUDE # error #define RWBC5_INCLUDE to full path # endif # define _RWSTD_BC5_HEADER(x) # endif // 0 # if (__TURBOC__ == 0x520) // Borland 5.02 & Borland C++Builder 1.0 # define _RWSTD_BC5_ENUM_BUG 1 # define _RWSTD_NO_BAD_CAST 1 # define _RWSTD_NO_CATOPEN_CATGETS 1 # define _RWSTD_NO_COMPLICATED_TYPEDEF 1 # define _RWSTD_NO_CONST_INST 1 # define _RWSTD_NO_EXPLICIT_ARG 1 # define _RWSTD_NO_FRIEND_TEMPLATES 1 # define _RWSTD_NO_INSTANTIATE 1 # define _RWSTD_NO_LOCALE 1 # define _RWSTD_NO_LONG_NAME 1 # define _RWSTD_NO_NAMESPACE 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_NONCLASS_ARROW_RETURN 1 # define _RWSTD_NO_NONTYPE_ARGS 1 # define _RWSTD_NO_PART_SPEC_OVERLOAD 1 # define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES 1 # define _RWSTD_NO_STATIC_DEF3 1 # define _RWSTD_NO_SWPRINTF 1 # define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1 # define _RWSTD_NO_TEMPLATE_TEMPLATE 1 # define _RWSTD_NO_TYPENAME 1 # define _RWSTD_NO_WINT_TYPE 1 # define _RWSTD_FLT_ROUNDS_IS_CONSTANT 1 # define _RWSTD_NO_STI_SIMPLE 1 # ifdef __WIN16__ # define _RWSTD_NO_MEMBER_WO_DEF_CTOR 1 # endif # define _RWSTD_EXPLICIT_SCOPE_DESTROY 1 # define _RWSTD_NO_WCTYPE_H 1 # define _RWSTD_NO_WCHAR_H 1 # define _RWSTD_NO_CLASS_PARTIAL_SPEC 1 # define _RWSTD_NO_FUNC_PARTIAL_SPEC 1 # define _RWSTD_NO_SIGNED_CHAR_IN_STREAMS 1 # define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1 # define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION 1 # define _RWSTD_NO_OVERLOAD_C_POW 1 # define _RWSTD_NO_NEW_TEMPLATE_SYNTAX 1 # define _RWSTD_NO_MBSTATE_T 1 # define _RWSTD_NO_WSTR 1 # endif // Borland 5.2 # if (__TURBOC__ >= 0x520) && ( __TURBOC__ <= 0x530 ) # define _RWSTD_BC5_ENUM_BUG 1 # define _RWSTD_NO_STI_SIMPLE 1 # define _RWSTD_NO_STI_TEMPLATE 1 # define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1 # define _RWSTD_NO_NEW_TEMPLATE_SYNTAX 1 // Enable iostream support for extra-long integer type. # define _RWSTD_LONG_LONG __int64 # define _RWSTD_LONG_LONG_PRINTF_PREFIX "L" # endif // Borland 5.2 # if ( __TURBOC__ >= 0x550 ) // Borland C++ Builder 5.0 (BCB) #ifdef __MT__ # define _RWSTD_MULTI_THREAD 1 #endif // __MT__ # define _RWSTD_FLT_ROUNDS_IS_CONSTANT 1 # define _RWSTD_EXCEPTION_HANDLER_IN_STD 1 // It's in except.h # define _RWSTD_NO_CATOPEN_CATGETS 1 # define _RWSTD_NO_MBSTATE_T 1 # define _RWSTD_NO_OVERLOAD_C_POW 1 # define _RWSTD_NO_NEW_BRACKETS 1 # define _RWSTD_NO_TEMPLATE_REPOSITORY 1 # define _RWSTD_NO_THROW_SPEC_NULL 1 // Enable iostream support for extra-long integer type. #ifndef __STDC__ # define _RWSTD_LONG_LONG __int64 # define _RWSTD_LONG_LONG_PRINTF_PREFIX "L" #endif // __STDC__ # define _RWSTD_NO_UNDEFINED_FRIEND 1 # endif // Borland 0x550 # endif // Borland > 4.5 #endif /* __TURBOC__ */ /************************ Microsoft C/C++ *****************************/ #if defined(_MSC_VER) && !defined(__BORLANDC__) // Disable MSVC's min and max macros # ifndef NOMINMAX # define NOMINMAX 1 # endif # define _RWSTD_MSC_BACKEND 1 /* MSVC version 2.1 */ # if _MSC_VER < 1100 # error Only Visual C++ versions 6.0 and better are supported. // MSVC 6.0 # else # define _RWSTD_NO_NEW_HEADER 1 # define _RWSTD_NO_TYPENAME 1 # define _RWSTD_NO_CLASS_PARTIAL_SPEC 1 # define _RWSTD_NO_COMPLICATED_TYPEDEF 1 # define _RWSTD_NO_EXPLICIT_INSTANTIATION 1 # define _RWSTD_NO_INSTANTIATE 1 # define _RWSTD_NO_NEW_BRACKETS 1 # define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1 # define _RWSTD_NO_BAD_CAST 1 # define _RWSTD_EXCEPTION_HANDLER_IN_STD 1 # define _RWSTD_NO_FRIEND_TEMPLATES 1 // Enable iostream support for extra-long integer type. # define _RWSTD_LONG_LONG __int64 # define _RWSTD_LONG_LONG_PRINTF_PREFIX "L" // Disable MSVC's "Same type qualifier used more than once" warning #pragma warning ( disable : 4114) # endif /* MSVC versions */ # 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 #endif // _MSC_VER /********************** IBM C/Set++ *********************************/ #ifdef __IBMCPP__ # ifdef __MULTI__ # define _RWSTD_MULTI_THREAD 1 # endif //__MULTI__ /********************** IBM Visual Age *******************************/ #ifdef __OS2__ // # define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1 # define _RWSTD_NO_FPOS_T 1 # define _RWSTD_NO_LDIV 1 # define _RWSTD_NO_WCTYPE_H 1 # define _RWSTD_NO_SWPRINTF 1 # define _RWSTD_NO_BOOL 1 # define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES 1 # define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES 1 # define _RWSTD_NO_MUTABLE 1 # define _RWSTD_NO_NAMESPACE 1 # define _RWSTD_NO_MEMBER_TEMPLATES 1 # define _RWSTD_NO_TYPENAME 1 # define _RWSTD_NO_MEM_CLASS_TEMPLATES 1 # define _RWSTD_NO_STI_SIMPLE 1 # define _RWSTD_NO_LONG_NAME 1 # define _RWSTD_NO_TEMPLATE_TEMPLATE 1 # define _RWSTD_NO_STATIC_CAST 1 # define _RWSTD_NO_EXPLICIT_ARG 1 # define _RWSTD_NO_NEW_HEADER 1 # define _RWSTD_NO_EXPLICIT 1 # define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG 1 # define _RWSTD_NO_EXPLICIT_INSTANTIATION 1 # define _RWSTD_NO_NONCLASS_ARROW_RETURN 1 # define _RWSTD_COMPILE_INSTANTIATE 1 # define _RWSTD_NO_LONG_HEADER_NAME 1 # define _RWSTD_NO_PART_SPEC_OVERLOAD 1 # define _RWSTD_NO_TEMPLATE_SPECIALIZATION 1 # define _RWSTD_NO_STATIC_DEF3 1 # define _RWSTD_WIDE_STRING_NULL_PROBLEM 1 # define _RWSTD_NO_DESTROY_BUILTIN 1 #endif //OS2 #endif //IBMCPP #ifndef RW_NEVER_ENTER_DEFAULT_HEADER_BLOCK #endif /* RW_NEVER_ENTER_DEFAULT_HEADER_BLOCK */ /********************** DECCXX ***************************************/ #if defined (__DECCXX) #ifdef _RWSTD_EXCEPTION_PREDEFINED #undef _RWSTD_EXCEPTION_PREDEFINED #endif #ifdef _RWSTD_EXCEPTION_DEFINED #undef _RWSTD_EXCEPTION_DEFINED #endif #ifdef _RWSTD_BAD_ALLOC_DEFINED #undef _RWSTD_BAD_ALLOC_DEFINED #endif #define _RWSTD_NO_MBSTATE_COMPARE 1 #endif // __DECCXX /********************** Miscellaneous *********************************/ /* 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 #if defined(__SUNPRO_CC)&&(__SUNPRO_CC>=0x420) #define _RWSTD_NO_TEMPLATE_STATIC_ID 1 #define _RWSTD_NO_MBSTATE_COMPARE #define _RWSTD_EXCEPTION_DEFINED #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 #if defined(__cplusplus)&&(__cplusplus >= 199707L) && defined(__STDCPP__) && (__STDCPP__ == 1) #define _HPACC_ 1 #undef _RWSTD_NO_NEW_HEADER #if defined(__cplusplus)&&(__cplusplus >= 199711L) #ifndef _RWSTD_BAD_ALLOC_DEFINED #define _RWSTD_BAD_ALLOC_DEFINED #endif #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC #define _RWSTD_NO_CLASS_PARTIAL_SPEC #endif #ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE #endif #ifndef _RWSTD_NO_MEMBER_TEMPLATES #define _RWSTD_NO_MEMBER_TEMPLATES #endif #endif #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 # ifdef _RWSTD_MSVC_BOOL_WARNING # pragma warning ( disable : 4237 ) # endif typedef int bool; # ifndef true # define true 1 # endif # ifndef false # define false 0 # endif #endif // _RWSTD_NO_BOOL #ifndef _RWSTD_NO_TYPENAME #define _TYPENAME typename #else #define _TYPENAME #endif #ifndef _RWSTD_NO_EXPLICIT #define _EXPLICIT explicit #else #define _EXPLICIT #endif #ifndef _RWSTD_NO_MUTABLE #define _MUTABLE mutable #else #define _MUTABLE #endif #ifndef _RWSTD_NO_TRICKY_INLINES #define _RWSTD_TRICKY_INLINE inline #else #define _RWSTD_TRICKY_INLINE #endif #ifdef _RWSTD_NO_MEMBER_WO_DEF_CTOR #define _RWSTD_NO_CONST_INST 1 #endif #if defined(_RWSTD_NO_STI_SIMPLE) && !defined(_RWSTD_NO_STI_TEMPLATE) #define _RWSTD_NO_STI_TEMPLATE #endif #ifdef _RWSTD_NO_EXPLICIT_INSTANTIATION # define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION 1 #endif #ifdef _RWSTD_NO_WIDE_CHAR # define _RWSTD_NO_OVERLOAD_WCHAR 1 # define _RWSTD_NO_WSTR 1 #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 // // Macro for forming or ommitting default template parameters. // #ifndef _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES # define _RWSTD_SIMPLE_DEFAULT(a) = a # ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES # define _RWSTD_COMPLEX_DEFAULT(a) = a # else # define _RWSTD_COMPLEX_DEFAULT(a) # endif #else # ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES # define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES # endif # define _RWSTD_SIMPLE_DEFAULT(a) # define _RWSTD_COMPLEX_DEFAULT(a) # ifndef _RWSTD_NO_DEFAULT_TEMPLATES # define _RWSTD_NO_DEFAULT_TEMPLATES # endif #endif // // Macros for adding 'std' or '__rwstd' to names // #ifndef _RWSTD_NO_NAMESPACE # if defined(_MSC_VER) && !defined(__BORLANDC__) # define _RW_STD ::std # define __RWSTD ::__rwstd # else # define _RW_STD std # define __RWSTD __rwstd # endif #else # define _RW_STD # define __RWSTD # endif // // Macro for casting, using either the "old" method // or the new C++ cast system // #ifdef _RWSTD_NO_STATIC_CAST # define _RWSTD_STATIC_CAST(x,y) (x)y # define _RWSTD_REINTERPRET_CAST(x,y) (x)y # define _RWSTD_CONST_CAST(x,y) (x)y # define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) x(z) #else # define _RWSTD_STATIC_CAST(x,y) static_cast< x >(y) # define _RWSTD_REINTERPRET_CAST(x,y) reinterpret_cast< x >(y) # define _RWSTD_CONST_CAST(x,y) const_cast< x >(y) # define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) reinterpret_cast< x >(const_cast< y >(z)) #endif // // Macro for the new template specialization syntax // #ifdef _RWSTD_NO_NEW_TEMPLATE_SYNTAX # define _RWSTD_TEMPLATE #else # define _RWSTD_TEMPLATE template<> #endif // // If compiler supports member and default templates then it support // the _RWSTD_ALLLOCATOR // #if !defined(_RWSTD_NO_MEMBER_TEMPLATES) && !defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) && !defined(_RWSTD_NO_MEM_CLASS_TEMPLATES) #define _RWSTD_ALLOCATOR #endif #ifdef _HPACC_ #ifdef _RWSTD_ALLOCATOR #undef _RWSTD_ALLOCATOR #endif #endif // // Define typedef macro // #ifdef _RWSTD_NO_EMBEDDED_TYPEDEF # define _RWSTD_ALLOC_SIZE_TYPE Allocator::size_type # define _RWSTD_ALLOC_DIFF_TYPE Allocator::difference_type #else # define _RWSTD_ALLOC_SIZE_TYPE allocator_type::size_type # define _RWSTD_ALLOC_DIFF_TYPE allocator_type::difference_type #endif #define _RWSTD_MB_CUR_MAX 16 //??? Need to find absolute maximum for this #include // // 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 #else #include #endif #define _RWSTD_THROW_NO_MSG(PRED,EXC) assert(!(PRED)) #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 or just a string. // #ifdef _RW_STD_EXCEPT #define _RWSTD_THROW_NO_MSG(PRED,EXC) if (PRED) throw EXC() #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw EXC(MESG) #else #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw (MESG) #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 // #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*/ #ifndef _RWSTD_NO_TRICKY_INLINES #define _RWSTD_INLINE_NO_THROW _RWSTD_THROW_SPEC_NULL #else #define _RWSTD_INLINE_NO_THROW #endif #if defined (__BORLANDC__) && defined(_RWSTD_NO_THROW_SPEC_NULL) # undef _RWSTD_THROW_SPEC_NULL # define _RWSTD_THROW_SPEC_NULL /**/ #endif // // Macro for path to the ANSI 'C' headers // Must be set specifically for each platform when the // C++ wrappers for 'C' headers are used. // #define _RWSTD_ANSIC(x) #endif /*__RWSTDCOMPILER_H__*/