home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / STDCOMP.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  34KB  |  1,153 lines

  1. #ifndef __STDRWCOMPILER_H__
  2. #define __STDRWCOMPILER_H__ 1
  3. /* $Revision:   8.3  $ */
  4.  
  5. /***************************************************************************
  6.  *
  7.  * Compiler and system related foibles and directives
  8.  *
  9.  * $Id: stdcomp.in,v 1.114 1995/10/03 17:26:32 smithey Exp $
  10.  *
  11.  ***************************************************************************
  12.  *
  13.  * (c) Copyright 1994, 1995 Rogue Wave Software, Inc.
  14.  * ALL RIGHTS RESERVED
  15.  *
  16.  * The software and information contained herein are proprietary to, and
  17.  * comprise valuable trade secrets of, Rogue Wave Software, Inc., which
  18.  * intends to preserve as trade secrets such software and information.
  19.  * This software is furnished pursuant to a written license agreement and
  20.  * may be used, copied, transmitted, and stored only in accordance with
  21.  * the terms of such license and with the inclusion of the above copyright
  22.  * notice.  This software and information or any other copies thereof may
  23.  * not be provided or otherwise made available to any other person.
  24.  *
  25.  * Notwithstanding any other lease or license that may pertain to, or
  26.  * accompany the delivery of, this computer software and information, the
  27.  * rights of the Government regarding its use, reproduction and disclosure
  28.  * are as set forth in Section 52.227-19 of the FARS Computer
  29.  * Software-Restricted Rights clause.
  30.  *
  31.  * Use, duplication, or disclosure by the Government is subject to
  32.  * restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
  33.  * Technical Data and Computer Software clause at DFARS 252.227-7013.
  34.  * Contractor/Manufacturer is Rogue Wave Software, Inc.,
  35.  * P.O. Box 2328, Corvallis, Oregon 97339.
  36.  *
  37.  * This computer software and information is distributed with "restricted
  38.  * rights."  Use, duplication or disclosure is subject to restrictions as
  39.  * set forth in NASA FAR SUP 18-52.227-79 (April 1985) "Commercial
  40.  * Computer Software-Restricted Rights (April 1985)."  If the Clause at
  41.  * 18-52.227-74 "Rights in Data General" is specified in the contract,
  42.  * then the "Alternate III" clause applies.
  43.  *
  44.  **************************************************************************/
  45.  
  46. /****************************************************************
  47.  ****************************************************************
  48.  *                                                              *
  49.  *              U S E R   T U N A B L E   S E C T I O N         *
  50.  *                                                              *
  51.  ****************************************************************
  52.  ****************************************************************/
  53.  
  54.  
  55. /*
  56.  * This section has various preprocessor constants that can
  57.  * be set to reflect the properties of your compiler.  For most
  58.  * compilers (particularly, MS-DOS compilers) there is no need
  59.  * to do anything --- most settings can be autodetected.
  60.  *
  61.  * For many Unix compilers you may have to tune the settings below.
  62.  * This is most easily done by running the "config" shell script
  63.  * which will try various test programs to discover the properties
  64.  * of your compiler.
  65.  *
  66.  *       THIS IS FAR EASIER THAN SETTING THESE BY HAND!
  67.  */
  68.  
  69. /*
  70.  *                   AT&T "CFRONT" USERS
  71.  */
  72.  
  73.  
  74. /*
  75.  * Most compilers have a built in "manifest constant".
  76.  * For the following compilers you must supply one by uncommenting
  77.  * an appropriate line:
  78.  *
  79.  *   AT&T cfront V2.X:       __ATT2__
  80.  *   AT&T cfront V3.0:       __ATT3__
  81.  */
  82.  
  83. /* #define __ATT2__ 1 */
  84. /* #define __ATT3__ 1 */
  85.  
  86. /**
  87.  **                     *** ALL USERS ***
  88.  **/
  89.  
  90.  
  91. #define RWSTD_NOMSG    0x00
  92. #define RWSTD_CATGETS  0x01
  93. #define RWSTD_GETTEXT  0x02
  94. #define RWSTD_DGETTEXT 0x03
  95.  
  96. /*
  97.  * Set RWSTD_MESSAGE to the type of messaging facility you want:
  98.  *   RWSTD_NOMSG         No messaging facility
  99.  *   RWSTD_CATGETS  Use catgets()
  100.  *   RWSTD_GETTEXT  Use gettext()
  101.  *   RWSTD_DGETTEXT Use dgettext()
  102.  */
  103.  
  104. #define RWSTD_MESSAGE RWSTD_NOMSG
  105.  
  106.  
  107. #if !defined( __TURBOC__) && !defined(_MSC_VER)
  108.  
  109. /******************** COMPILER WORD SIZES, ETC ********************/
  110.  
  111. /*
  112.  * Uncomment the following and set to the number of decimal digits
  113.  * of precision for type double.
  114.  * If you do nothing, the default will be 16.
  115.  */
  116.  
  117. /* #define RWSTD_DEFAULT_PRECISION 16 */
  118.  
  119.  
  120. /*************** COMPILER QUIRKS AND LIMITATIONS ******************/
  121.  
  122. /*
  123.  * Uncomment the following if your compiler does not support
  124.  * exceptions.
  125.  */
  126.  
  127. /* #define RWSTD_NO_EXCEPTIONS 1 */
  128.  
  129. /*
  130.  * Uncomment the following if your compiler does not support
  131.  * exceptions specifications.
  132.  */
  133.  
  134. /* #define RWSTD_NO_EX_SPEC 1 */
  135.  
  136.  
  137. /*
  138.  * Uncomment the following if your compiler does not support
  139.  * throwing of exceptions from a shared library.
  140.  */
  141.  
  142. /* #define RWSTD_NO_THROW_WITH_SHARED 1 */
  143.  
  144. /*************************** TEMPLATES **********************************/
  145.  
  146. /*
  147.  * Uncomment the following if your compiler does not instantiates only those
  148.  * functions, member functions, classes or member classes that are
  149.  * required; i.e. your compiler instantiates things that your program
  150.  * doesn't actually use.
  151.  */
  152.  
  153. /* #define RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1 */
  154.  
  155.  
  156. /*
  157.  * Uncomment the following if your compiler does template
  158.  * instantiation at compile time.
  159.  */
  160.  
  161. /* #define RWSTD_COMPILE_INSTANTIATE 1 */
  162.  
  163.  
  164. /*************************** STRINGS ****************************/
  165.  
  166. /*
  167.  * Uncomment the following if your sprintf() does not
  168.  * return the size of the buffer as an int, as ANSI C requires.
  169.  */
  170.  
  171. /* #define RWSTD_NO_ANSI_SPRINTF 1 */
  172.  
  173.  
  174. /*
  175.  * Uncomment the following if your compiler does not have the
  176.  * ANSI C function memmove().
  177.  */
  178.  
  179. /* #define RWSTD_NO_MEMMOVE 1 */
  180.  
  181.  
  182. /****************** INTERNATIONALIZATION ************************/
  183.  
  184. /*
  185.  * Uncomment the following if your compiler does not support
  186.  * wide characters strings (e.g., functions wslen(), etc.).
  187.  */
  188.  
  189. /* #define RWSTD_NO_WSTR 1 */
  190.  
  191.  
  192. /*
  193.  * Uncomment the following if the type wchar_t is just a typedef,
  194.  * instead of a distinct type.
  195.  */
  196.  
  197. /* #define RWSTD_NO_OVERLOAD_WCHAR 1 */
  198.  
  199.  
  200. /*
  201.  * Uncomment the following if your compiler does not support
  202.  * the ANSI C locale facility fully, or if it does not support
  203.  * it at all (in particular, uncomment if setlocale(), strxform(),
  204.  * or strcoll() are not present or don't work).
  205.  */
  206.  
  207. /* #define RWSTD_NO_LOCALE 1 */
  208.  
  209.  
  210. /*
  211.  * Uncomment the following if your compiler does not have
  212.  * the %C directive to strftime().
  213.  */
  214.  
  215. /* #define RWSTD_NO_STRFTIME_CAPC 1 */
  216.  
  217.  
  218. /************************** TIME ********************************/
  219.  
  220. /*
  221.  * Uncomment the following if your compiler does not have global
  222.  * variables "_daylight", "_timezone", and "_tzname", or corresponding
  223.  * variables without a leading underscore (generally
  224.  * this is true only for pure Berkeley systems).
  225.  */
  226.  
  227. /* #define RWSTD_NO_GLOBAL_TZ 1 */
  228.  
  229.  
  230. /*
  231.  * Uncomment the following if your system supplies a global variable
  232.  * named "daylight" instead of the nominally more correct "_daylight".
  233.  */
  234.  
  235. /* #define RWSTD_NO_LEADING_UNDERSCORE 1 */
  236.  
  237.  
  238. /*
  239.  * If your system does not have global variables "daylight" and
  240.  * "timezone" (see directive immediately above) and does not have
  241.  * the Berkeley function gettimeofday() either, then uncomment
  242.  * the following:
  243.  */
  244.  
  245. /* #define RWSTD_NO_GETTIMEOFDAY 1 */
  246.  
  247.  
  248. /*
  249.  * If the struct tm defined in your <time.h> has extra member data
  250.  * "tm_zone" and "tm_gmtoff" (this is true for SunOs 4.X), then you
  251.  * should uncomment the following:
  252.  */
  253.  
  254. /* #define RWSTD_STRUCT_TM_TZ 1 */
  255.  
  256. /************************** STANDARD LIBRARY ****************************/
  257.  
  258. /*
  259.  * Uncomment the following if your compiler does not support the bool type.
  260.  * This means that bool is not a unique type.
  261.  */
  262.  
  263. /* #define RWSTD_NO_BOOL 1 */
  264.  
  265. /*
  266.  * Uncomment the following if your compiler does not support default
  267.  * templates. e.g:
  268.  * template<class T = int> ...
  269.  */
  270.  
  271. /* #define RWSTD_NO_DEFAULT_TEMPLATES 1 */
  272.  
  273. /*
  274.  * Uncomment the following if your compiler doesn't support ~T()
  275.  * where T is a builtin.
  276.  */
  277.  
  278. /* #define RWSTD_NO_DESTROY_BUILTIN 1 */
  279.  
  280. /*
  281.  * Uncomment the following if your compiler doesn't support ~T()
  282.  * where T is a non-builtin.
  283.  */
  284.  
  285. /* #define RWSTD_NO_DESTROY_NONBUILTIN 1 */
  286.  
  287. /*
  288.  * If your compiler does not support complicated exceptions, such as
  289.  * throwing a domain_error exception, then uncomment the following:
  290.  */
  291.  
  292. /* #define RWSTD_NO_COMPLICATED_EXCEPTIONS 1 */
  293.  
  294. /*
  295.  * Uncomment the following if your compiler cannot handle nested
  296.  * templates, or if you have to define the body of a class within
  297.  * the template (mostly sun compilers!)
  298.  */
  299.  
  300. /* #define RWSTD_NO_NESTING_TEMPLATES 1 */
  301.  
  302. /*
  303.  * If your compiler does not support long double operators in iostreams, then
  304.  * uncomment the following:
  305.  */
  306.  
  307. /* #define RWSTD_NO_STREAM_LONG_DOUBLE 1 */
  308.  
  309. /*
  310.  * Uncomment the following if your compiler does not support the
  311.  * mutable keyword
  312.  */
  313.  
  314. /* #define RWSTD_NO_MUTABLE 1 */
  315.  
  316. /*
  317.  * If your compiler does not support namespaces, uncomment the following
  318.  */
  319.  
  320. /* #define RWSTD_NO_NAMESPACE 1 */
  321.  
  322. /*
  323.  * Uncomment the following if your compiler does not support
  324.  * member template functions:
  325.  * template<class T> class C {
  326.  *  template<class F> void foo();
  327.  * };
  328.  */
  329.  
  330. /* #define RWSTD_NO_MEMBER_TEMPLATES 1 */
  331.  
  332.  
  333. /*
  334.  * Uncomment the following if your compiler does not support
  335.  * member template classes:
  336.  * class C {
  337.  *  template <class F> class N {};
  338.  * };
  339.  */
  340.  
  341. /* #define RWSTD_NO_MEM_CLASS_TEMPLATES 1 */
  342.  
  343. /*
  344.  * If nontype-args are not allowed in function declarations, then uncomment
  345.  * the following.  template<int i> void foo(char f[10][i])
  346.  */
  347.  
  348. /* #define RWSTD_NO_NONTYPE_ARGS 1 */
  349.  
  350. /*
  351.  * If simple static initialization of const member variables is not allowed,
  352.  * uncomment the following
  353.  */
  354.  
  355. /* #define RWSTD_NO_STI_SIMPLE 1 */
  356.  
  357. /*
  358.  * If complex static initialization of const member variables is not allowed,
  359.  * uncomment the following
  360.  */
  361.  
  362. /* #define RWSTD_NO_STI_COMPLEX 1 */
  363.  
  364.  
  365. /*
  366.  * If access to private types as return types outside the class
  367.  * is allowed, uncomment the following.
  368.  */
  369.  
  370. /* #define RWSTD_NO_PRIV_RET 1 */
  371.  
  372.  
  373. /*
  374.  * If nested static template variables cannot be defined outside the
  375.  * class, uncomment this.
  376. */
  377.  
  378. /* #define RWSTD_NO_STATIC_DEF 1 */
  379.  
  380. /*
  381.  * If static template variable definitions do not require initializers,
  382.  * uncomment this.
  383.  */
  384.  
  385. /* #define RWSTD_NO_STATIC_DEF2 1 */
  386.  
  387.  
  388. /*
  389.  * If templatized static data members do not work correctly, uncomment this.
  390.  */
  391.  
  392. /* #define RWSTD_NO_STATIC_DEF3 1 */
  393.  
  394.  
  395. /*
  396.  * If declaration of a non-member op such as | is not allowed with user
  397.  * defined types such as enums, uncomment the following
  398.  */
  399.  
  400. /* #define RWSTD_NO_ENUM_OP 1 */
  401.  
  402. /*
  403.  * Are long mangled names handled correctly by your compiler/linker?
  404.  * If not, uncomment the following
  405.  */
  406.  
  407. /* #define RWSTD_NO_LONG_NAME 1 */
  408.  
  409. /*
  410.  * Are complicated typedefs handled by your compiler?
  411.  * If not, uncomment the following
  412.  */
  413.  
  414. /* #define RWSTD_NO_COMPLICATED_TYPEDEF 1 */
  415.  
  416. /*
  417.  * If your compiler does not support template template classes, then
  418.  * uncomment the following:
  419.  * template<class T, template<class U> allocator>
  420.  */
  421.  
  422. /* #define RWSTD_NO_TEMPLATE_TEMPLATE 1 */
  423.  
  424. /* If your compiler does not treat wide chars as a distinct
  425.    type, uncomment the following */
  426.  
  427. /* #define RWSTD_NO_WIDE_CHAR 1 */
  428.  
  429. /*
  430.  * If your compiler does not handle typedef scoping correctly,
  431.  * then uncomment the following.
  432.  */
  433.  
  434. /* #define RWSTD_NO_TYPEDEF_OVERLOAD 1 */
  435.  
  436. /*
  437.  * If your compiler does not function match on template base classes
  438.  * correctly, then uncomment the following.
  439.  */
  440.  
  441. /* #define RWSTD_NO_BASE_CLASS_MATCH 1 */
  442.  
  443. /*
  444.  * If your compiler does not handle forward specializations
  445.  * correctly, then uncomment the following.
  446.  */
  447.  
  448. /* #define RWSTD_NO_FORWARD_SPECIALIZATIONS 1 */
  449.  
  450. /*
  451.  * If your compiler does not handle template types as return types
  452.  * uncomment the following.
  453.  */
  454.  
  455. /* #define RWSTD_NO_RET_TEMPLATE 1 */
  456.  
  457. /*
  458.  * If your compiler does not understand explicit constructors, uncomment
  459.  * the following.
  460.  */
  461.  
  462. /* #define RWSTD_NO_EXPLICIT 1 */
  463.  
  464. /*
  465.  * If your compiler does not understand explicit argument qualification,
  466.  * uncomment the following.
  467.  */
  468.  
  469. /* #define RWSTD_NO_EXPLICIT_ARG 1 */
  470.  
  471.  
  472. /*
  473.  * If your compiler does not understand the typename keyword, uncomment
  474.  * the following.
  475.  */
  476.  
  477. /* #define RWSTD_NO_TYPENAME 1 */
  478.  
  479. /*
  480.  * Does your compiler instantiate templates correctly?  If not, uncomment
  481.  * the following
  482.  */
  483.  
  484. /* #define RWSTD_NO_INSTANTIATION 1 */
  485.  
  486. /*
  487.  * Does your compiler instantiate typedefs of itself correctly?
  488.  * If not, uncomment the following
  489.  */
  490.  
  491. /* #define RWSTD_NO_TYPEDEF_INST 1 */
  492.  
  493. /*
  494.  * Does your compiler instantiate templates with const types correctly?
  495.  * If not, uncomment the following
  496.  */
  497.  
  498. /* #define RWSTD_NO_CONST_INST 1 */
  499.  
  500. /*
  501.  * Does your compiler assume trait typedefs are int? If not, uncomment
  502.  * the following
  503.  */
  504.  
  505. /* #define RWSTD_NO_INT_TYPEDEF 1 */
  506.  
  507. /*
  508.  * Does your compiler give an ambiguity error on allocate()? If so, uncomment
  509.  * the following
  510.  */
  511.  
  512. /* #define RWSTD_NO_ARG_MATCH 1 */
  513.  
  514. /*
  515.  * Does your compiler supply the new C++-style C headers?  If not,
  516.  * uncomment the following
  517.  */
  518.  
  519. /* #define RWSTD_NO_NEW_HEADER 1 */
  520.  
  521.  
  522. /*
  523.  * does your compiler provide a placement new definition?  If no,
  524.  * uncomment the following
  525.  */
  526.  
  527. /* #define RWSTD_NO_NEW_DECL 1 */
  528.  
  529. /*
  530.  * does your compiler inherit typedefs in templates correctly?  If no,
  531.  * uncomment the following
  532.  */
  533.  
  534. /* #define RWSTD_NO_INHERITED_TYPEDEFS 1 */
  535.  
  536. /*
  537.  * Does your compiler have difficulty with constructors in a return
  538.  * statement?  If so then uncomment the following.
  539.  */
  540.  
  541. /* #define RWSTD_NO_CTOR_RETURN 1 */
  542.  
  543. /*
  544.  * Does your compiler have difficulty with undeclared friends?  If so
  545.  * then uncomment the following.
  546.  */
  547.  
  548. /* #define RWSTD_NO_UNDECLARED_FRIEND 1 */
  549.  
  550. /*
  551.  * Does your compiler have trouble with structures that lack a default
  552.  * constructor even when their instantiation is indirect?  If so
  553.  * then uncomment the following.
  554.  */
  555.  
  556. /* #define RWSTD_NO_MEMBER_WO_DEF_CTOR 1 */
  557.  
  558. /*
  559.  * Does your compiler allow un-initialized static members?  If not
  560.  * then uncomment the following.
  561.  */
  562.  
  563. /* #define RWSTD_NO_UNINITIALIZED_STATIC_DEF 1*/
  564.  
  565. /*
  566.  * Does your compiler allow member types as template parameters?  If not
  567.  * then uncomment the following.
  568.  */
  569.  
  570. /* #define RWSTD_NO_MEMBER_TYPE_TPARAM 1 */
  571.  
  572. /*
  573.  * Does your compiler dis-allow the use of 'static' in the out of line
  574.  * initialization of a static const member?  If so then uncomment the
  575.  * following.
  576.  */
  577.  
  578. /* #define RWSTD_NO_STATIC_MEM_DEF 1 */
  579.  
  580. /*
  581.  * Does your compiler not allow default constructor syntax on built in
  582.  * types. (e.g. int i = int();).  If so then uncomment the following.
  583.  */
  584.  
  585. /* #define RWSTD_NO_BUILTIN_CTOR 1 */
  586.  
  587. /* Does your compiler not allow defaults for parameters in function
  588.  * templates when the function parameter is a template parameter type.
  589.  * If so then uncomment the following.
  590.  */
  591.  
  592. /* #define RWSTD_NO_DEFAULT_FOR_TPARAM 1 */
  593.  
  594. /* Does your compiler not allow name injection.  For instance, does it
  595.  * allow member function specializations to be declared but not defined,
  596.  * so that the template versions of these functions will be used.
  597.  * If not, then uncomment the following.
  598.  */
  599.  
  600. /* #define RWSTD_NO_NAME_INJECTION 1 */
  601.  
  602. /* Does your compiler have problems overloading on function template
  603.  * arguments that are partial specializations?
  604.  * If so, then uncomment the following.
  605.  */
  606.  
  607. /* #define RWSTD_NO_PART_SPEC_OVERLOAD 1 */
  608.  
  609. /* Does your compiler vendor supply wctype.h?
  610.  * If not, then uncomment the following.
  611.  */
  612.  
  613. /* #define RWSTD_NO_WCTYPE_H 1 */
  614.  
  615. /* Can your compiler handle explicit instantiations?
  616.  * If so, then uncomment the following.
  617.  */
  618.  
  619. /* #define RWSTD_NO_EXPLICIT_INSTANTIATION 1 */
  620.  
  621.  
  622.  
  623. /*************************************************************************
  624. **************************************************************************
  625. **                                                                      **
  626. **              From here on, it's pretty much boilerplate              **
  627. **              and rarely requires any tuning.                         **
  628. **                                                                      **
  629. **************************************************************************
  630. **************************************************************************/
  631.  
  632.  
  633. /************************ Cfront derivatives ******************************/
  634.  
  635. /* Any of these defines a cfront style compiler: */
  636. #if defined(__ATT1__) || defined(__ATT2__) || defined(__ATT3__)
  637. #  define __ATT__ 1
  638. #endif
  639.  
  640. #endif // !(__TURBOC__) && !(_MSC_VER)
  641.  
  642. #define STARTWRAP
  643. #define ENDWRAP
  644.  
  645.  
  646. /*************************** Symantec *******************************/
  647.  
  648. /*
  649.  * No longer supports Zortech.  Must have Symantec V6.0 or greater.
  650.  */
  651. #if defined(__SC__)
  652. /*************************** For Macs *******************************/
  653. #  if defined(macintosh)
  654. #    define RWSTD_CRLF_CONVENTION       1
  655. #    define RWSTD_NO_EXCEPTIONS         1
  656. #    define RWSTD_NO_GETTIMEOFDAY       1
  657. #    define RWSTD_NO_FRIEND_INLINE_DECL 1
  658. #    define RWSTD_NO_GLOBAL_TZ          1
  659. #    define RWSTD_NO_LOCALE             1
  660. #    define RWSTD_NO_OVERLOAD_WCHAR     1
  661. #    define RWSTD_NO_WSTR               1
  662. /*************************** For PC's *******************************/
  663. #  else
  664. #    define __MSDOS__                1
  665. #    define RWSTD_COMPILE_INSTANTIATE   1
  666.  
  667. #    if (__SC__ <= 0x610)
  668. #      define RWSTD_NO_EXCEPTIONS       1
  669. #      define RWSTD_NO_GETTIMEOFDAY     1
  670. #      define RWSTD_NO_GLOBAL_TZ        1
  671. #      define RWSTD_NO_OVERLOAD_WCHAR   1
  672. #      define RWSTD_NO_WSTR             1
  673. #    endif
  674. #  endif
  675. #endif
  676.  
  677. /********************** Borland's Turbo C++ **************************/
  678.  
  679. #if defined(__TURBOC__)
  680.  
  681. #define RWSTD_NO_LONG_HEADER_NAME          1
  682.  
  683. #  if defined(__MSDOS__) && defined(_Windows)
  684. #    define __WIN16__ 1
  685. #  endif
  686.  
  687. /*
  688.  * For Borland, the __export keyword in a function declaration must
  689.  * come after the return type:
  690.  */
  691. #  define RWSTD_TRAILING_RWEXPORT 1
  692.    /*
  693.     * Turbo and Borland won't inline code that contains
  694.     * "while" or "for" loops or that generates temporaries
  695.     * requiring destructors:
  696.     */
  697. #  define RWSTD_NO_INLINED_WHILES           1
  698. #  define RWSTD_NO_INLINED_FORS             1
  699. #  define RWSTD_NO_INLINED_TEMP_DESTRUCTORS 1
  700.  
  701.    /* The Borland compilers left out this definition: */
  702. #  define name2 _Paste2
  703.  
  704.    /* Turbo C++ V1.00 forgets the segment address when passing
  705.       a class as a far reference if the class has not been defined. */
  706. #  if __TURBOC__ <= 0x0295
  707. #    define RWSTD_UNDEFINED_REFERENCE_BUG       1
  708. #  endif
  709.  
  710. #  if __TURBOC__ >=0x200
  711.  
  712. /*
  713.  *  In Borland C++ versions previous to 4.0, wchar_t is not a
  714.  *  built-in type and there are no exceptions
  715.  */
  716. #    if __TURBOC__ < 0x449
  717. #      define RWSTD_NO_EXCEPTIONS         1
  718. #      define RWSTD_NO_FRIEND_INLINE_DECL 1
  719. #      define RWSTD_NO_OVERLOAD_WCHAR     1
  720. #    endif
  721. #    if __TURBOC__ < 0x469
  722. #      define RWSTD_NO_BOOL                         1
  723. #      define RWSTD_NO_DEFAULT_TEMPLATES            1
  724. #      define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES    1
  725. #      define RWSTD_NO_LOCALE                       1
  726. #      define RWSTD_NO_MUTABLE                      1
  727. #      define RWSTD_NO_NAMESPACE                    1
  728. #      define RWSTD_NO_EXPLICIT                     1
  729. #      define RWSTD_NO_EXPLICIT_ARG                 1
  730. #      define RWSTD_NO_MEMBER_TEMPLATES             1
  731. #      define RWSTD_NO_MEM_CLASS_TEMPLATES          1
  732. #      define RWSTD_NO_NESTING_TEMPLATES            1
  733. #      define RWSTD_NO_NEW_HEADER                   1
  734. #      define RWSTD_NO_NONTYPE_ARGS                 1
  735. #      define RWSTD_NO_STATIC_DEF3                  1
  736. #      define RWSTD_NO_STI_COMPLEX                  1
  737. #      define RWSTD_NO_STI_SIMPLE                   1
  738. #      define RWSTD_NO_PRIV_RET                     1
  739. #      define RWSTD_NO_TEMPLATE_TEMPLATE            1
  740. #      define RWSTD_NO_DESTROY_BUILTIN              1
  741. #      define RWSTD_NO_TYPENAME                     1
  742. #      define RWSTD_NO_CONST_INST                   1
  743. #      define RWSTD_NO_LONG_NAME                    1
  744. #      define RWSTD_NO_FORWARD_SPECIALIZATIONS      1
  745. #      define RWSTD_NO_PART_SPEC_OVERLOAD           1
  746. #      define RWSTD_NO_EXPLICIT_INSTANTIATION       1
  747.  
  748. #elif __TURBOC__ <= 0x520
  749. /*
  750.  *   Borland 5.0:
  751.  *   implements namespaces, bool and mutable
  752.  */
  753. #      define RWSTD_NO_DEFAULT_TEMPLATES            1
  754. #      define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES    1
  755. #      define RWSTD_NO_LOCALE                       1
  756. #      define RWSTD_NO_EXPLICIT                     1
  757. #      define RWSTD_NO_EXPLICIT_ARG                 1
  758. #      define RWSTD_NO_MEMBER_TEMPLATES             1
  759. #      define RWSTD_NO_MEM_CLASS_TEMPLATES          1
  760. #      define RWSTD_NO_NESTING_TEMPLATES            1
  761. #      define RWSTD_NO_NEW_HEADER                   1
  762. #      define RWSTD_NO_NONTYPE_ARGS                 1
  763. #      define RWSTD_NO_STATIC_DEF3                  1
  764. #      define RWSTD_NO_STI_COMPLEX                  1
  765. #      define RWSTD_NO_STI_SIMPLE                   1
  766. #      define RWSTD_NO_PRIV_RET                     1
  767. #      define RWSTD_NO_TEMPLATE_TEMPLATE            1
  768. #      define RWSTD_NO_DESTROY_BUILTIN              1
  769. #      define RWSTD_NO_TYPENAME                     1
  770. #      define RWSTD_NO_CONST_INST                   1
  771. #      define RWSTD_NO_LONG_NAME                    1
  772. #      define RWSTD_NO_COMPLICATED_TYPEDEF          1
  773. #      define RWSTD_NO_PART_SPEC_OVERLOAD           1
  774. #      define RWSTD_NO_SPEC_OVERLOAD                1
  775. #      define RWSTD_NO_EX_SPEC                      1
  776. #      define RWSTD_BC5_ENUM_BUG                    1
  777.  
  778. #    endif
  779. /*
  780.  *   If the win32 API is available we can supply the WC string stuff
  781.  *   for Borland (except for wcsxfrm for now)
  782.  */
  783. #    ifdef __WIN32__
  784. /*   This is temporarily commented out until stdlib support this
  785.           partial wide string implementation */
  786. /* #      define RWSTD_SUPPLY_WSTR 1
  787.         #      define RWSTD_NO_WCSXFRM  1    */
  788. #      define RWSTD_NO_WSTR     1
  789. #    else
  790. #      define RWSTD_NO_WSTR     1
  791. #    endif
  792.  
  793. #    ifdef __MT__
  794. #      define RWSTD_MULTI_THREAD 1
  795. #    endif
  796.  
  797. #  endif        /* end post Turbo C++ V1.01 section */
  798. #endif  /* __TURBOC__ */
  799.  
  800. /************************ Microsoft C/C++ *****************************/
  801.  
  802. #if defined(_MSC_VER)
  803.  
  804.  
  805. #  define RWSTD_MSC_BACKEND       1
  806.  
  807.  
  808. /* MSVC version 2.1 */
  809. #if _MSC_VER < 901
  810. #      define RWSTD_NO_BASE_CLASS_MATCH             1
  811. #      define RWSTD_NO_CTOR_RETURN                  1
  812. #      define RWSTD_NO_UNDECLARED_FRIEND            1
  813. #      define RWSTD_NO_MEMBER_WO_DEF_CTOR           1
  814. #      define RWSTD_NO_UNINITIALIZED_STATIC_DEF     1
  815. #      define RWSTD_NO_DEFAULT_FOR_TPARAM           1
  816. #      define RWSTD_NO_FORWARD_SPECIALIZATIONS      1
  817. #      define RWSTD_NO_MEMBER_TYPE_TPARAM           1
  818. #      define RWSTD_NO_NAME_INJECTION               1
  819. #      define RWSTD_NO_LONG_HEADER_NAME             1
  820. #      define RWSTD_NO_OVERLOAD_WCHAR               1
  821. #      define RWSTD_NO_WCTYPE_H                     1
  822. #      define RWSTD_NO_PART_SPEC_OVERLOAD           1
  823. #      define RWSTD_NO_BOOL                         1
  824. #      define RWSTD_NO_DEFAULT_TEMPLATES            1
  825. #      define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES    1
  826. #      define RWSTD_NO_LOCALE                       1
  827. #      define RWSTD_NO_MUTABLE                      1
  828. #      define RWSTD_NO_NAMESPACE                    1
  829. #      define RWSTD_NO_EXPLICIT                     1
  830. #      define RWSTD_NO_EXPLICIT_ARG                 1
  831. #      define RWSTD_NO_MEMBER_TEMPLATES             1
  832. #      define RWSTD_NO_MEM_CLASS_TEMPLATES          1
  833. #      define RWSTD_NO_NESTING_TEMPLATES            1
  834. #      define RWSTD_NO_NEW_HEADER                   1
  835. #      define RWSTD_NO_NONTYPE_ARGS                 1
  836. #      define RWSTD_NO_STATIC_DEF                   1
  837. #ifdef _RWSTDDLL
  838. #      define RWSTD_NO_STATIC_DEF3                  1
  839. #endif
  840. #      define RWSTD_NO_STI_COMPLEX                  1
  841. #      define RWSTD_NO_STI_SIMPLE                   1
  842. #      define RWSTD_NO_PRIV_RET                     1
  843. #      define RWSTD_NO_TEMPLATE_TEMPLATE            1
  844. #      define RWSTD_NO_TYPENAME                     1
  845. #      define RWSTD_NO_BUILT_IN_CTOR                1
  846. #      define RWSTD_NO_NEW_DECL                     1
  847. #      define RWSTD_COMPILE_INSTANTIATE             1
  848. #      define RWSTD_NO_DESTROY_NONBUILTIN           1
  849. #      define RWSTD_NO_STATIC_MEM_DEF               1
  850. #      define RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  851. #      define RWSTD_NO_EXCEPTIONS                   1
  852.  
  853. /* MSVC version 3.0 */
  854. #elif _MSC_VER < 1001
  855. #      define RWSTD_NO_BOOL                         1
  856. #      define RWSTD_NO_DEFAULT_TEMPLATES            1
  857. #      define RWSTD_NO_FORWARD_DEFAULT_TEMPLATES    1
  858. #      define RWSTD_NO_LOCALE                       1
  859. #      define RWSTD_NO_MUTABLE                      1
  860. #      define RWSTD_NO_NAMESPACE                    1
  861. #      define RWSTD_NO_EXPLICIT                     1
  862. #      define RWSTD_NO_EXPLICIT_ARG                 1
  863. #      define RWSTD_NO_MEMBER_TEMPLATES             1
  864. #      define RWSTD_NO_MEM_CLASS_TEMPLATES          1
  865. #      define RWSTD_NO_LONG_HEADER_NAME             1
  866. #      define RWSTD_NO_NEW_HEADER                   1
  867. #      define RWSTD_NO_NONTYPE_ARGS                 1
  868. #      define RWSTD_NO_STATIC_DEF                   1
  869. #ifdef _RWSTDDLL
  870. #      define RWSTD_NO_STATIC_DEF3                  1
  871. #endif
  872. #      define RWSTD_NO_STI_COMPLEX                  1
  873. #      define RWSTD_NO_STI_SIMPLE                   1
  874. #      define RWSTD_NO_PRIV_RET                     1
  875. #      define RWSTD_NO_TEMPLATE_TEMPLATE            1
  876. #      define RWSTD_NO_TYPENAME                     1
  877. #      define RWSTD_NO_BUILT_IN_CTOR                1
  878. #      define RWSTD_COMPILE_INSTANTIATE             1
  879. #      define RWSTD_NO_DESTROY_NONBUILTIN           1
  880. #      define RWSTD_NO_STATIC_MEM_DEF               1
  881. #      define RWSTD_NO_OVERLOAD_WCHAR               1
  882. #      define RWSTD_NO_WCTYPE_H                     1
  883. #      define RWSTD_NO_OVERLOAD_FUNC_PTR            1
  884. #      define RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  885. #      define RWSTD_NO_PART_SPEC_OVERLOAD           1
  886. #      define RWSTD_NO_CONST_INST                   1
  887. #      define RWSTD_NO_EX_SPEC                      1
  888.  
  889. #endif
  890.  
  891. #  if defined(_MSDOS) && !defined(WIN32) && !defined(_WIN32)
  892. #    define __MSDOS__   1
  893. #    if defined(_WINDOWS)
  894. #      define __WIN16__ 1
  895. #    endif
  896. #  endif
  897. #  if defined(WIN32) || defined(_WIN32)
  898. #    define __WIN32__
  899. #    define RWSTD_TOLOWER_SIGN_EXTENDS_RESULT_BUG 1
  900. #  else
  901. #    define RWSTD_NO_WSTR 1
  902. #  endif
  903.  
  904. #  ifdef _RWBUILDDLL
  905. #    define __DLL__ 1
  906. #  endif
  907.  
  908. #  ifdef _M_I86SM
  909. #    define __SMALL__ 1
  910. #  endif
  911. #  ifdef _M_I86CM
  912. #    define __COMPACT__ 1
  913. #  endif
  914. #  ifdef _M_I86MM
  915. #    define __MEDIUM__ 1
  916. #  endif
  917. #  ifdef _M_I86LM
  918. #    define __LARGE__ 1
  919. #  endif
  920. #  ifdef _MT
  921. #    define RWSTD_MULTI_THREAD 1
  922. #  endif
  923. #endif
  924.  
  925.  
  926. /********************** Metaware High C/C++ ***************************/
  927.  
  928. #if defined(__HIGHC__)
  929. #  define RWSTD_NO_OVERLOAD_WCHAR 1
  930. #  if defined(_MSDOS)
  931. #    define __MSDOS__ 1
  932. #    define RWSTD_HIGHC_INLINE_BUG  1
  933. #    define RWSTD_NO_EXCEPTIONS     1
  934. #    define RWSTD_NO_WSTR 1
  935. #  endif
  936.  
  937. #  if defined(_OS2)
  938. #    undef __OS2__
  939. #    define __OS2__ 1
  940. #    define RWSTD_SUPPLY_WSTR 1
  941. #    define RWSTD_NO_WCSXFRM  1
  942. #    ifdef _REENTRANT
  943. #      define RWSTD_MULTI_THREAD 1
  944. #    endif
  945. #  endif
  946.  
  947. #  if defined(_MSNT)
  948. #    undef __WIN32__
  949. #    define __WIN32__ 1
  950. #    define RWSTD_NO_WSTR 1
  951. #    if defined(_REENTRANT) || defined(_MT)
  952. #      define RWSTD_MULTI_THREAD 1
  953. #    endif
  954. #  endif
  955.  
  956. #endif  /* __HIGHC__ */
  957.  
  958. /************************** MPW *************************************/
  959.  
  960. #if defined(applec)
  961. #  define RWSTD_BROKEN_TOKEN_PASTE    1
  962. #  define RWSTD_REVERSED_CR_AND_LF    1
  963. #  define RWSTD_NATIVE_EXTENDED       1
  964. #  define RWSTD_NO_ACCESS_ADJUSTMENT  1
  965. #  define RWSTD_NO_EXCEPTIONS         1
  966. #  define RWSTD_NO_GETTIMEOFDAY       1
  967. #  define RWSTD_NO_GLOBAL_TZ          1
  968. #  define RWSTD_NO_LEADING_UNDERSCORE 1
  969. #  define RWSTD_NO_OSTR_REF_CAST      1
  970. #  define RWSTD_NO_OVERLOAD_WCHAR     1
  971. #  define RWSTD_NO_WSTR               1
  972. #endif
  973.  
  974. /********************** IBM C/Set++   *********************************/
  975.  
  976. #ifdef __IBMCPP__
  977. #  define RWSTD_NO_WSTR           1
  978. #  ifdef __MULTI__
  979. #    define RWSTD_MULTI_THREAD 1
  980. #  endif
  981. #endif
  982.  
  983. /********************** IBM xlC   *********************************/
  984.  
  985. #if defined(_AIX) && !defined(unix)
  986. #define unix 1
  987. #endif
  988.  
  989. /********************** Miscellaneous *********************************/
  990.  
  991. /*
  992.  * These compilers instantiate templates at compile-time;
  993.  * others at link-time.
  994.  */
  995. #if defined(__TURBOC__) || defined(__HIGHC__) || defined(__xlC__) || defined(__GNUG__) || defined(__WATCOMC__) || defined(__IBMCPP__) || defined(__os_cplusplus)
  996. # define RWSTD_COMPILE_INSTANTIATE 1
  997. #endif
  998.  
  999. /* No Pi for these compilers: */
  1000. #if defined(RWSTD_MSC_BACKEND) || defined(__OREGON__) || defined(__HIGHC__) || defined(applec) || defined(CII) || defined(__WATCOMC__)
  1001. #  ifndef M_PI
  1002. #    define M_PI 3.14159265358979323846
  1003. #  endif
  1004. #endif
  1005.  
  1006. /*
  1007.  * Only Sun defines strftime("%C", ...)
  1008.  */
  1009. #if !defined(RWSTD_NO_STRFTIME_CAPC) && !defined(sun)
  1010. #define RWSTD_NO_STRFTIME_CAPC 1
  1011. #endif
  1012.  
  1013. /********************** Environment *********************************/
  1014. /*
  1015.  * This is the section for setting things which depend on the properties
  1016.  * of the operating systems rather than specific compilers.  It follows
  1017.  * the compiler section so we have the chance to rationalize the different
  1018.  * preprocessor constants (e.g. _MSDOS vs. __MSDOS__,  _M_I86LM vs. __LARGE__)
  1019.  */
  1020.  
  1021. #ifndef RWSTD_DEFAULT_PRECISION
  1022. #   define RWSTD_DEFAULT_PRECISION 16   /* Assume standard IEEE format */
  1023. #endif
  1024.  
  1025. /*
  1026.  * Most (but not all) non-unix systems convert new line to carriage
  1027.  * return / line feed on output:
  1028.  */
  1029. #if defined(__MSDOS__) || defined(__OS2__) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__)
  1030. #  define RWSTD_CRLF_CONVENTION 1
  1031. #endif
  1032.  
  1033. /*
  1034. ** Miscellaneous workarounds.
  1035. */
  1036.  
  1037. #ifdef RWSTD_NO_BOOL
  1038. typedef int     bool;
  1039. #define true    1
  1040. #define false   0
  1041. #endif
  1042.  
  1043. #ifdef RWSTD_NO_TYPENAME
  1044. #define typename
  1045. #endif
  1046.  
  1047. #ifdef RWSTD_NO_EXPLICIT
  1048. #define explicit
  1049. #endif
  1050.  
  1051. #ifndef RWSTD_NO_INLINED_WHILES
  1052. #define RWSTD_WHILE_INLINE inline
  1053. #endif
  1054.  
  1055. #ifndef RWSTD_NO_INLINED_FORS
  1056. #define RWSTD_FOR_INLINE inline
  1057. #endif
  1058.  
  1059. #ifndef RWSTD_NO_INLINED_TEMP_DESTRUCTORS
  1060. #define RWSTD_TEMP_DTOR_INLINE inline
  1061. #endif
  1062.  
  1063. #ifdef RWSTD_NO_MEMBER_WO_DEF_CTOR
  1064. #define RWSTD_NO_CONST_INST
  1065. #endif
  1066.  
  1067. #define RWSTD_MB_CUR_MAX 16  //???  Need to find absolute maximum for this
  1068.  
  1069. #include <compnent.h>
  1070.  
  1071. //
  1072. // Define a generic macro for throw.  To be used as in the following:
  1073. //
  1074. //    RWSTD_THROW(i < j && j < k, out_of_range, "j is out of range!");
  1075. //
  1076. //                ^ predicate     ^ exception   ^ message
  1077. //
  1078. // literally, if (predicate) throw exception(message)
  1079. //
  1080. #ifdef RWSTD_NO_EXCEPTIONS
  1081. //
  1082. // If we don't have exceptions, then we'll use assert.
  1083. // We don't allow them to turn off the assert() in which such
  1084. // a thrown exception would result.
  1085. //
  1086.  
  1087. #ifdef  NDEBUG
  1088. #define __RW_NDEBUG
  1089. #undef  NDEBUG
  1090. #endif
  1091. #ifndef RWSTD_NO_NEW_HEADER
  1092. #include <cassert>
  1093. #else
  1094. #include <assert.h>
  1095. #endif
  1096. #define RWSTD_THROW(PRED,EXC,MESG) assert(!(PRED))
  1097. //
  1098. // We must also turn off expansion of assert() if that's what the user expects.
  1099. //
  1100. #ifdef  __RW_NDEBUG
  1101. #define NDEBUG
  1102. #undef  __RW_NDEBUG
  1103. #endif
  1104. #else /*!RWSTD_NO_EXCEPTIONS*/
  1105. //
  1106. // We must check to see if we can use <stdexcept> or just a string.
  1107. //
  1108. #ifdef RW_STD_EXCEPT
  1109. #define RWSTD_THROW(PRED,EXC,MESG) (PRED) ? throw EXC(MESG) : 0
  1110. #else
  1111. #define RWSTD_THROW(PRED,EXC,MESG) (PRED) ? throw (MESG)    : 0
  1112. #endif
  1113. #endif /*RWSTD_NO_EXCEPTIONS*/
  1114.  
  1115. //
  1116. // Define two generic throw specification macros.  One to illustrate
  1117. // the exceptions that a function can throw and the other to indicate
  1118. // that a function doesn't throw any exceptions.
  1119. //
  1120. //   RWSTD_THROW_SPEC(ExceptionList)
  1121. //
  1122. //   RWSTD_THROW_SPEC_NULL
  1123. //
  1124. // Owing to the face that the first macro must be able to take a
  1125. // variable number of arguments, we must simulate this by always
  1126. // passing the exceptions in parentheses; i.e.
  1127. //
  1128. //  void f () RWSTD_THROW_SPEC((out_of_range));
  1129. //  void g () RWSTD_THROW_SPEC((domain_error, invalid_argument));
  1130. //  void h () RWSTD_THROW_SPEC((out_of_range, invalid_argument, length_error));
  1131. //
  1132.  
  1133. #if defined(RWSTD_NO_EXCEPTIONS) || defined(RWSTD_NO_EX_SPEC)
  1134. #define RWSTD_THROW_SPEC(EXCEPTIONS) /**/
  1135. #define RWSTD_THROW_SPEC_NULL        /**/
  1136. #else
  1137. #ifdef RW_STD_EXCEPT
  1138. //
  1139. // RWSTD_THROW will use the exceptions in <stdexcept>
  1140. //
  1141. #define RWSTD_THROW_SPEC(ExceptionList) throw ExceptionList
  1142. #define RWSTD_THROW_SPEC_NULL           throw()
  1143. #else
  1144. //
  1145. // RWSTD_THROW will only throw const char *
  1146. //
  1147. #define RWSTD_THROW_SPEC(ExceptionList) throw(const char *)
  1148. #define RWSTD_THROW_SPEC_NULL           throw()
  1149. #endif
  1150. #endif /*RWSTD_NO_EXCEPTIONS||RWSTD_NO_EX_SPEC*/
  1151.  
  1152. #endif /*__RWSTDCOMPILER_H__*/
  1153.