|
1 // (C) Copyright John Maddock 2001 - 2003. |
|
2 // (C) Copyright Jens Maurer 2001. |
|
3 // (C) Copyright David Abrahams 2003. |
|
4 // (C) Copyright Boris Gubenko 2007. |
|
5 // Use, modification and distribution are subject to the |
|
6 // Boost Software License, Version 1.0. (See accompanying file |
|
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
8 |
|
9 // See http://www.boost.org for most recent version. |
|
10 |
|
11 // Rogue Wave std lib: |
|
12 |
|
13 #if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) |
|
14 # include <boost/config/no_tr1/utility.hpp> |
|
15 # if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) |
|
16 # error This is not the Rogue Wave standard library |
|
17 # endif |
|
18 #endif |
|
19 // |
|
20 // figure out a consistent version number: |
|
21 // |
|
22 #ifndef _RWSTD_VER |
|
23 # define BOOST_RWSTD_VER 0x010000 |
|
24 #elif _RWSTD_VER < 0x010000 |
|
25 # define BOOST_RWSTD_VER (_RWSTD_VER << 8) |
|
26 #else |
|
27 # define BOOST_RWSTD_VER _RWSTD_VER |
|
28 #endif |
|
29 |
|
30 #ifndef _RWSTD_VER |
|
31 # define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)" |
|
32 #elif _RWSTD_VER < 0x04010200 |
|
33 # define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER) |
|
34 #else |
|
35 # ifdef _RWSTD_VER_STR |
|
36 # define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR |
|
37 # else |
|
38 # define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER) |
|
39 # endif |
|
40 #endif |
|
41 |
|
42 // |
|
43 // Prior to version 2.2.0 the primary template for std::numeric_limits |
|
44 // does not have compile time constants, even though specializations of that |
|
45 // template do: |
|
46 // |
|
47 #if BOOST_RWSTD_VER < 0x020200 |
|
48 # define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS |
|
49 #endif |
|
50 |
|
51 // Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the |
|
52 // library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817): |
|
53 #if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550)) |
|
54 # define BOOST_NO_LONG_LONG_NUMERIC_LIMITS |
|
55 # endif |
|
56 |
|
57 // |
|
58 // Borland version of numeric_limits lacks __int64 specialisation: |
|
59 // |
|
60 #ifdef __BORLANDC__ |
|
61 # define BOOST_NO_MS_INT64_NUMERIC_LIMITS |
|
62 #endif |
|
63 |
|
64 // |
|
65 // No std::iterator if it can't figure out default template args: |
|
66 // |
|
67 #if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000) |
|
68 # define BOOST_NO_STD_ITERATOR |
|
69 #endif |
|
70 |
|
71 // |
|
72 // No iterator traits without partial specialization: |
|
73 // |
|
74 #if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC) |
|
75 # define BOOST_NO_STD_ITERATOR_TRAITS |
|
76 #endif |
|
77 |
|
78 // |
|
79 // Prior to version 2.0, std::auto_ptr was buggy, and there were no |
|
80 // new-style iostreams, and no conformant std::allocator: |
|
81 // |
|
82 #if (BOOST_RWSTD_VER < 0x020000) |
|
83 # define BOOST_NO_AUTO_PTR |
|
84 # define BOOST_NO_STRINGSTREAM |
|
85 # define BOOST_NO_STD_ALLOCATOR |
|
86 # define BOOST_NO_STD_LOCALE |
|
87 #endif |
|
88 |
|
89 // |
|
90 // No template iterator constructors without member template support: |
|
91 // |
|
92 #if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES) |
|
93 # define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS |
|
94 #endif |
|
95 |
|
96 // |
|
97 // RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use |
|
98 // (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR |
|
99 // on HP aCC systems even though the allocator is in fact broken): |
|
100 // |
|
101 #if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100) |
|
102 # define BOOST_NO_STD_ALLOCATOR |
|
103 #endif |
|
104 |
|
105 // |
|
106 // If we have a std::locale, we still may not have std::use_facet: |
|
107 // |
|
108 #if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE) |
|
109 # define BOOST_NO_STD_USE_FACET |
|
110 # define BOOST_HAS_TWO_ARG_USE_FACET |
|
111 #endif |
|
112 |
|
113 // |
|
114 // There's no std::distance prior to version 2, or without |
|
115 // partial specialization support: |
|
116 // |
|
117 #if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) |
|
118 #define BOOST_NO_STD_DISTANCE |
|
119 #endif |
|
120 |
|
121 // |
|
122 // Some versions of the rogue wave library don't have assignable |
|
123 // OutputIterators: |
|
124 // |
|
125 #if BOOST_RWSTD_VER < 0x020100 |
|
126 # define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN |
|
127 #endif |
|
128 |
|
129 // |
|
130 // Disable BOOST_HAS_LONG_LONG when the library has no support for it. |
|
131 // |
|
132 #if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG) |
|
133 # undef BOOST_HAS_LONG_LONG |
|
134 #endif |
|
135 |
|
136 // |
|
137 // check that on HP-UX, the proper RW library is used |
|
138 // |
|
139 #if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD) |
|
140 # error "Boost requires Standard RW library. Please compile and link with -AA" |
|
141 #endif |
|
142 |
|
143 // |
|
144 // Define macros specific to RW V2.2 on HP-UX |
|
145 // |
|
146 #if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100) |
|
147 # ifndef __HP_TC1_MAKE_PAIR |
|
148 # define __HP_TC1_MAKE_PAIR |
|
149 # endif |
|
150 # ifndef _HP_INSTANTIATE_STD2_VL |
|
151 # define _HP_INSTANTIATE_STD2_VL |
|
152 # endif |
|
153 #endif |
|
154 |
|
155 // |
|
156 // We never have the new C++0x unordered containers: |
|
157 // |
|
158 #define BOOST_NO_STD_UNORDERED |
|
159 |