]> git.lyx.org Git - lyx.git/blob - boost/boost/config.hpp
update config.hpp
[lyx.git] / boost / boost / config.hpp
1 //  Boost config.hpp configuration header file  ------------------------------//
2
3 //  (C) Copyright Boost.org 1999. Permission to copy, use, modify, sell and
4 //  distribute this software is granted provided this copyright notice appears
5 //  in all copies. This software is provided "as is" without express or implied
6 //  warranty, and with no claim as to its suitability for any purpose.
7
8 //  See http://www.boost.org for most recent version.
9
10 //  Boost config.hpp policy and rationale documentation has been moved to
11 //  http://www.boost.org/libs/config
12
13 //  Revision History (excluding minor changes for specific compilers)
14 //   29 Mar 01  BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS (Daryle Walker)
15 //   16 Mar 01  Added BOOST_VERSION (Jens Maurer)
16 //   06 Mar 01  Refactored EDG checks for Intel C++ (Dave Abrahams)
17 //   04 Mar 01  Factored EDG checks, added BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
18 //              for Intel C++ 5.0 (Dave Abrahams)
19 //   17 Feb 01  BOOST_NO_CV_SPECIALIZATIONS
20 //              BOOST_NO_CV_VOID_SPECIALIZATIONS (John Maddock)
21 //   11 Feb 01  Added BOOST_STATIC_CONSTANT (Dave Abrahams)
22 //   20 Jan 01  BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS moved here from
23 //              cast.hpp. Added missing BOOST_NO_STRINGSTREAM which some
24 //              boost code seemed to depend on. (Dave Abrahams)
25 //   13 Jan 01  SGI MIPSpro and Compaq Tru64 Unix compiler support added
26 //              (Jens Maurer)
27 //   13 Jan 01  BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP (Jens Maurer)
28 //   17 Nov 00  BOOST_NO_AUTO_PTR (John Maddock)
29 //    4 Oct 00  BOOST_NO_STD_MIN_MAX (Jeremy Siek)
30 //   29 Sep 00  BOOST_NO_INTEGRAL_INT64_T (Jens Maurer)
31 //   25 Sep 00  BOOST_NO_STD_ALLOCATOR (Jeremy Siek)
32 //   18 SEP 00  BOOST_NO_SLIST, BOOST_NO_HASH, 
33 //              BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
34 //              BOOST_NO_LIMITS (Jeremy Siek)
35 //    1 Sep 00  BOOST_NO_PRIVATE_IN_AGGREGATE added. (Mark Rodgers)
36 //   23 Jul 00  Fixed spelling of BOOST_NO_INCLASS_MEMBER_INITIALIZATION in
37 //              comment (Dave Abrahams). 
38 //   10 Jul 00  BOOST_NO_POINTER_TO_MEMBER_CONST added (Mark Rodgers)
39 //   26 Jun 00  BOOST_NO_STD_ITERATOR, BOOST_MSVC_STD_ITERATOR,
40 //              BOOST_NO_STD_ITERATOR_TRAITS, BOOST_NO_USING_TEMPLATE,
41 //              added (Jeremy Siek)
42 //   20 Jun 00  BOOST_MSVC added (Aleksey Gurtovoy)
43 //   14 Jun 00  BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS (Jens M.)
44 //   22 Mar 00  BOOST_MSVC6_MEMBER_TEMPLATES added (Dave Abrahams)
45 //   18 Feb 00  BOOST_NO_INCLASS_MEMBER_INITIALIZATION added (Jens Maurer)
46 //   26 Jan 00  Borland compiler support added (John Maddock)
47 //   26 Jan 00  Sun compiler support added (Jörg Schaible)
48 //   30 Dec 99  BOOST_NMEMBER_TEMPLATES compatibility moved here from
49 //              smart_ptr.hpp. (Dave Abrahams)
50 //   15 Nov 99  BOOST_NO_OPERATORS_IN_NAMESPACE,
51 //              BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION added (Beman Dawes)
52 //   11 Oct 99  BOOST_NO_STDC_NAMESPACE refined; <cstddef> supplied
53 //   29 Sep 99  BOOST_NO_STDC_NAMESPACE added (Ed Brey)
54 //   24 Sep 99  BOOST_DECL added (Ed Brey)
55 //   10 Aug 99  Endedness flags added, GNU CC support added
56 //   22 Jul 99  Initial version
57  
58
59 #ifndef BOOST_CONFIG_HPP
60 #define BOOST_CONFIG_HPP
61
62 #define BOOST_VERSION 102300
63
64 //  BOOST_VERSION % 100 is the sub-minor version
65 //  BOOST_VERSION / 100 % 1000 is the minor version
66 //  BOOST_VERSION / 100000 is the major version
67
68
69 //  Conformance Flag Macros  -------------------------------------------------//
70 //
71 //  Conformance flag macros should identify the absence of C++ Standard 
72 //  conformance rather than its presence.  This ensures that standard conforming
73 //  compilers do not require a lot of configuration flag macros.  It places the
74 //  burden where it should be, on non-conforming compilers.  In the future,
75 //  hopefully, less rather than more conformance flags will have to be defined.
76
77 //  BOOST_NO_CV_SPECIALIZATIONS: if template specialisations for cv-qualified types
78 //  conflict with a specialistaion for unqualififed type.
79
80 //  BOOST_NO_CV_VOID_SPECIALIZATIONS: if template specialisations for cv-void types
81 //  conflict with a specialistaion for void.
82
83 //  BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP: Compiler does not implement
84 //  argument-dependent lookup (also named Koenig lookup); see std::3.4.2
85 //  [basic.koenig.lookup]
86
87 //  BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS: Template value
88 //  parameters cannot have a dependent type, for example
89 //  "template<class T, typename T::type value> class X { ... };"
90
91 //  BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS: Can only use deduced
92 //  template arguments when calling function template instantiations.
93
94 //  BOOST_NO_INCLASS_MEMBER_INITIALIZATION: Compiler violates std::9.4.2/4. 
95
96 //  BOOST_NO_INT64_T: <boost/cstdint.hpp> does not support 64-bit integer
97 //  types.  (Set by <boost/cstdint.hpp> rather than <boost/config.hpp>).
98
99 //  BOOST_NO_INTEGRAL_INT64_T: int64_t as defined by <boost/cstdint.hpp> is
100 //  not an integral type.
101
102 //  BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS: constants such as
103 //  numeric_limits<T>::is_signed are not available for use at compile-time.
104
105 //  BOOST_NO_MEMBER_TEMPLATES: Member template functions not fully supported.
106 //  Also see BOOST_MSVC6_MEMBER_TEMPLATES in the Compiler Control section below.
107
108 //  BOOST_NO_MEMBER_TEMPLATE_FRIENDS: Member template friend syntax
109 //  ("template<class P> friend class frd;") described in the C++ Standard,
110 //  14.5.3, not supported.
111
112 //  BOOST_NO_OPERATORS_IN_NAMESPACE: Compiler requires inherited operator
113 //  friend functions to be defined at namespace scope, then using'ed to boost.
114 //  Probably GCC specific.  See boost/operators.hpp for example.
115
116 //  BOOST_NO_POINTER_TO_MEMBER_CONST: The compiler does not correctly handle
117 //  pointers to const member functions, preventing use of these in overloaded 
118 //  function templates.  See boost/functional.hpp for example.
119
120 //  BOOST_NO_PRIVATE_IN_AGGREGATE: The compiler misreads 8.5.1, treating classes
121 //  as non-aggregate if they contain private or protected member functions. 
122
123 //  BOOST_NO_STD_ITERATOR: The C++ implementation fails to provide the
124 //  std::iterator class.
125
126 //  BOOST_NO_STD_ITERATOR_TRAITS: The compiler does not provide a standard
127 //  compliant implementation of std::iterator_traits. Note that
128 //  the compiler may still have a non-standard implementation.
129
130 //  BOOST_NO_STDC_NAMESPACE: The contents of C++ standard headers for C library
131 //  functions (the <c...> headers) have not been placed in namespace std.
132 //  Because the use of std::size_t is so common, a specific workaround for
133 //  <cstddef> (and thus std::size_t) is provided in this header (see below).
134 //  For other <c...> headers, a workaround must be provided in the boost header:
135 //
136 //    #include <cstdlib>  // for abs
137 //    #ifdef BOOST_NO_STDC_NAMESPACE
138 //      namespace std { using ::abs; }
139 //    #endif
140
141 //  BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION. Class template partial
142 //  specialization (14.5.4 [temp.class.spec]) not supported.
143
144 //  BOOST_NO_USING_TEMPLATE: The compiler will not accept a using declaration
145 //  that imports a template from the global namespace into a named namespace.
146 //  Probably Borland specific.
147
148 //  BOOST_NO_AUTO_PTR: If the compiler / library supplies non-standard or broken
149 //  std::auto_ptr.
150
151 //  BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING: The compiler does not perform 
152 //  function template ordering or its function template ordering is incorrect.
153 //  
154 //  template<typename T> void f(T); // #1
155 //  template<typename T, typename U> void f(T (*)(U)); // #2
156 //  void bar(int);
157 //  f(&bar); // should choose #2. 
158
159 //  BOOST_NO_DEPENDENT_NESTED_DERIVATIONS: The compiler fails to compile
160 //  a nested class that has a dependent base class:
161 //  template<typename T>
162 //  struct foo : public T {  
163 //    template<typename U>
164 //    struct bar : public T, public U {};
165 //  };
166
167 //  
168 //  Compiler Control or Information Macros  ----------------------------------//
169 //
170 //  Compilers often supply features outside of the C++ Standard which need to be
171 //  controlled or detected. As usual, reasonable default behavior should occur
172 //  if any of these macros are not defined.
173
174 //  BOOST_DECL:  Certain compilers for Microsoft operating systems require
175 //  non-standard class and function decoration if dynamic load library linking
176 //  is desired.  BOOST_DECL supplies that decoration.  Boost does not require
177 //  use of BOOST_DECL - it is non-standard and to be avoided if practical to do
178 //  so. Even compilers requiring it for DLL's only require it in certain cases.
179 //
180 //    BOOST_DECL_EXPORTS:  User defined, usually via command line or IDE,
181 //    it causes BOOST_DECL to be defined as __declspec(dllexport).
182 //
183 //    BOOST_DECL_IMPORTS:  User defined, usually via command line or IDE,
184 //    it causes BOOST_DECL to be defined as __declspec(dllimport).
185 //
186 //    If neither BOOST_DECL_EXPORTS nor BOOST_DECL_IMPORTS is defined, or if
187 //    the compiler does not require __declspec() decoration, BOOST_DECL is
188 //    defined as a null string.
189
190 //  BOOST_MSVC6_MEMBER_TEMPLATES:  Microsoft Visual C++ 6.0 has enough member
191 //  template idiosyncrasies (being polite) that BOOST_NO_MEMBER_TEMPLATES is
192 //  defined for this compiler. BOOST_MSVC6_MEMBER_TEMPLATES is defined to allow
193 //  compiler specific workarounds.
194
195 //  BOOST_MSVC: defined as _MSC_VER for the Microsoft compiler only. In general,
196 //  boost headers should test for a specific conformance flag macro (for
197 //  example, BOOST_NO_MEMBER_TEMPLATE_FRIENDS) rather than a specific compiler.
198 //  VC++ is a special case, however, since many libraries try to support it yet
199 //  it has so many conformance issues that sometimes it is just easier to test
200 //  for it directly. On the other hand, the obvious way to do this doesn't work,
201 //  as many non-Microsoft compilers define _MSC_VER.  Thus BOOST_MSVC.
202
203 //  BOOST_MSVC_STD_ITERATOR: Microsoft's broken version of std::iterator
204 //  is being used. 
205
206 //  BOOST_SYSTEM_HAS_STDINT_H: There are no 1998 C++ Standard headers <stdint.h> 
207 //  or <cstdint>, although the 1999 C Standard does include <stdint.h>. 
208 //  If <stdint.h> is present, <boost/stdint.h> can make good use of it,
209 //  so a flag is supplied (signalling presence; thus the default is not
210 //  present, conforming to the current C++ standard).
211
212 //  BOOST_NO_SLIST: The C++ implementation does not provide the slist class.
213
214 //  BOOST_NO_STRINGSTREAM: The C++ implementation does not provide the <sstream> header.
215
216 //  BOOST_NO_HASH: The C++ implementation does not provide the hash_set
217 //  or hash_map classes.
218
219 //  BOOST_STD_EXTENSION_NAMESPACE: The name of the namespace in which the slist,
220 //  hash_set and/or hash_map templates are defined in this implementation (if any).
221
222 //  BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS: The standard library does not provide
223 //  templated iterator constructors for its containers.
224
225 //  BOOST_NO_LIMITS: The C++ implementation does not provide the <limits> header.
226
227 //  BOOST_NO_INTRINSIC_WCHAR_T: The C++ implementation does not provide wchar_t,
228 //  or it is really a synonym for another integral type. Use this symbol to
229 //  decide whether it is appropriate to explicitly specialize a template on
230 //  wchar_t if there is already a specialization for other integer types.
231
232 //  BOOST_NO_STD_ALLOCATOR: The C++ standard library does not provide
233 //  a standards conforming std::allocator.
234
235 //  BOOST_NO_STD_MIN_MAX: The C++ standard library does not provide
236 //  the min() and max() template functions that should be in <algorithm>.
237
238 //  Common compiler front-ends precede all compiler checks  ------------------//
239
240 //  Edison Design Group front-ends
241 # if defined(__EDG_VERSION__)
242 #   if __EDG_VERSION__ <= 241
243 #     define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
244 #   endif
245
246 # endif
247
248 //  Compiler-specific checks -------------------------------------------------//
249 //  Compilers are listed in alphabetic order by vendor name
250 //  (except VC++ must be last - see below)
251
252 //  Borland ------------------------------------------------------------------//
253
254 #if defined __BORLANDC__
255 #   define BOOST_NO_SLIST
256 #   define BOOST_NO_HASH
257 // pull in standard library version:
258 #   include <memory>
259 #   if __BORLANDC__ <= 0x0551
260 #     define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
261 #     define BOOST_NO_INTEGRAL_INT64_T
262 #     define BOOST_NO_PRIVATE_IN_AGGREGATE
263 #   endif
264 #   if __BORLANDC__ <= 0x0550
265 // Borland C++ Builder 4 and 5:
266 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
267 #     define BOOST_NO_USING_TEMPLATE
268 #     if __BORLANDC__ == 0x0550
269 // Borland C++ Builder 5, command-line compiler 5.5:
270 #       define BOOST_NO_OPERATORS_IN_NAMESPACE
271 #     endif
272 #   endif
273 #   if defined BOOST_DECL_EXPORTS
274 #     if defined BOOST_DECL_IMPORTS
275 #       error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
276 #     endif
277 #     define BOOST_DECL __declspec(dllexport)
278 #   elif defined BOOST_DECL_IMPORTS
279 #     define BOOST_DECL __declspec(dllimport)
280 #   else
281 #     define BOOST_DECL
282 #   endif
283 #if (__BORLANDC__ == 0x550) || (__BORLANDC__ == 0x551)
284 // <climits> is partly broken, some macos define symbols that are really in
285 // namespace std, so you end up having to use illegal constructs like
286 // std::DBL_MAX, as a fix we'll just include float.h and have done with:
287 #include <float.h>
288 #endif
289 #   define BOOST_NO_CV_SPECIALIZATIONS
290 #   define BOOST_NO_CV_VOID_SPECIALIZATIONS
291
292 // Comeau C++ ----------------------------------------------------------------//
293
294 # elif defined __COMO__
295 #   if __COMO_VERSION__ <= 4245
296 #     define BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
297 #   endif
298
299 //  Compaq Tru64 Unix cxx ---------------------------------------------------
300
301 # elif defined __DECCXX
302 #   define BOOST_NO_SLIST
303 #   define BOOST_NO_HASH
304
305 //  GNU CC (also known as GCC and G++)  --------------------------------------//
306
307 # elif defined __GNUC__
308 #   if __GNUC__ == 2 && __GNUC_MINOR__ == 91
309        // egcs 1.1 won't parse smart_ptr.hpp without this:
310 #      define BOOST_NO_AUTO_PTR
311 #   endif
312 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 97
313 #     include "LString.h"  // not sure this is the right way to do this -JGS
314 #     if defined(__BASTRING__) && !defined(__GLIBCPP__) && !defined(_CXXRT_STD) && !defined(__SGI_STL) // need to ask Dietmar about this -JGS
315         // this should only detect the stdlibc++ that ships with gcc, and
316         // not any replacements that may be installed...
317 #       define BOOST_NO_STD_ITERATOR
318 #       define BOOST_NO_LIMITS
319 #     endif
320 #     if !defined(_CXXRT_STD) && !defined(__SGI_STL_OWN_IOSTREAMS)
321 #       define BOOST_NO_STRINGSTREAM
322 #     endif
323 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
324 #     define BOOST_NO_OPERATORS_IN_NAMESPACE
325 #     define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
326 #   endif
327 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
328 #     define BOOST_NO_MEMBER_TEMPLATES
329 #   endif
330 #   if __GNUC__ >= 3
331 #     include <iterator>
332 #     if defined(__GLIBCPP__)
333         // The new GNU C++ library has slist, hash_map, hash_set headers
334         // in <ext/*>, but client code assumes they're in <*> --- Jens M. 
335 #       define BOOST_NO_SLIST
336 #       define BOOST_NO_HASH
337 #     endif
338 #   endif
339
340 //  Greenhills C++ -----------------------------------------------------------//
341
342 #elif defined __ghs
343 #   define BOOST_NO_SLIST
344 #   define BOOST_NO_HASH
345
346 //  HP aCC -------------------------------------------------------------------
347
348 # elif defined __HP_aCC
349 #    define BOOST_NO_SLIST
350 #    define BOOST_NO_HASH
351 #    define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
352 #    define BOOST_NO_OPERATORS_IN_NAMESPACE
353      // (support for HP aCC is not complete, see the regression test results)
354
355 //  Intel on Linux -----------------------------------------------------------//
356
357 #elif defined __ICC
358 #   include <iterator>
359 #   ifdef _CPPLIB_VER 
360       // shipped with Dinkumware 3.10, which has a different hash_map
361 #     define BOOST_NO_HASH
362 #   endif
363
364 //  Intel on Windows --------------------------------------------------------//
365
366 # elif defined __ICL
367 #   if __ICL <= 500
368       // Intel C++ 5.0.1 uses EDG 2.45, but fails to activate Koenig lookup
369       // in the frontend even in "strict" mode.  (reported by Kirk Klobe)
370 #     ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
371 #       define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
372 #     endif
373 #     define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
374 #     define BOOST_NO_INTRINSIC_WCHAR_T // tentative addition - required for VC6 compatibility? (added by JM 19 Feb 2001)
375 #   endif
376 #   include <iterator>  // not sure this is the right way to do this -JGS
377 #   if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
378         // a perfectly good implementation of std::iterator is supplied
379 #   elif defined(__SGI_STL_ITERATOR)
380 #     define BOOST_NO_STD_ITERATOR // No std::iterator in this case
381 #   elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
382 #     // full dinkumware 3.06 and above
383 #     define BOOST_NO_HASH
384 #     define BOOST_NO_STD_ITERATOR_TRAITS
385 #     if !_GLOBAL_USING   // can be defined in yvals.h
386 #       define BOOST_NO_STDC_NAMESPACE
387 #     endif
388 #   else // assume using dinkumware's STL that comes with VC++ 6.0
389 #     define BOOST_MSVC_STD_ITERATOR
390 #     define BOOST_NO_STD_ITERATOR_TRAITS
391 #     define BOOST_NO_STDC_NAMESPACE
392 #     define BOOST_NO_SLIST
393 #     define BOOST_NO_HASH
394 #     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
395 #     define BOOST_NO_STD_ALLOCATOR
396 #     define BOOST_NO_STD_MIN_MAX
397 #   endif
398
399 //  Kai C++ ----------------------------------------------------------------
400
401 #elif defined __KCC
402 #   define BOOST_NO_SLIST
403 #   define BOOST_NO_HASH
404
405 #   if __KCC_VERSION <= 4001
406       // at least on Sun, the contents of <cwchar> is not in namespace std
407 #     define BOOST_NO_STDC_NAMESPACE
408 #   endif
409  
410 //  Metrowerks CodeWarrior  -------------------------------------------------//
411
412 # elif defined  __MWERKS__
413 #   if __MWERKS__ <= 0x2401  // 6.2
414 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
415 #     define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
416 #   endif
417 #   if __MWERKS__ <= 0x2301  // 5.3
418 #     define BOOST_NO_POINTER_TO_MEMBER_CONST
419 #     define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
420 #     define BOOST_NO_HASH
421 #   endif
422 #   if __MWERKS__ >= 0x2400
423 #     define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
424 #   endif
425 #   if __MWERKS__ >= 0x2300
426 #     define BOOST_SYSTEM_HAS_STDINT_H
427 #   endif
428 #   if defined BOOST_DECL_EXPORTS
429 #     if defined BOOST_DECL_IMPORTS
430 #       error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
431 #     endif
432 #     define BOOST_DECL __declspec(dllexport)
433 #   elif defined BOOST_DECL_IMPORTS
434 #     define BOOST_DECL __declspec(dllimport)
435 #   else
436 #     define BOOST_DECL
437 #   endif
438
439 //  SGI MIPSpro C++ ---------------------------------------------------------//
440
441 # elif defined __sgi
442     // This is a generic STLport condition and could be moved elsewhere.
443 #   include <iterator>
444 #   if defined(__SGI_STL_PORT) && !defined(__STL_MEMBER_TEMPLATE_CLASSES) && !defined(_STLP_MEMBER_TEMPLATE_CLASSES)
445 #     define BOOST_NO_STD_ALLOCATOR
446 #   endif
447
448 //  Sun Workshop Compiler C++ -----------------------------------------------//
449
450 # elif defined  __SUNPRO_CC
451 #    if __SUNPRO_CC <= 0x520
452 #      define BOOST_NO_SLIST
453 #      define BOOST_NO_HASH
454 #      define BOOST_NO_STD_ITERATOR_TRAITS
455 #      define BOOST_NO_STD_ALLOCATOR
456
457        // although sunpro 5.1 supports the syntax for
458        // inline initialization it often gets the value
459        // wrong, especially where the value is computed
460        // from other constants (J Maddock 6th May 2001)
461 #      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
462
463        // although sunpro 5.1 supports the syntax for
464        // partial specialization, it often seems to
465        // bind to the wrong specialization.  Better
466        // to disable it until suppport becomes more stable
467        // (J Maddock 6th May 2001).
468 #      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
469 #    endif
470 #    if __SUNPRO_CC <= 0x500
471 #      define BOOST_NO_MEMBER_TEMPLATES
472 #      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
473 #    endif
474
475 //  Microsoft Visual C++ (excluding Intel/EDG front end)  --------------------
476 //
477 //  Must remain the last #elif since some other vendors (Metrowerks, for
478 //  example) also #define _MSC_VER
479
480 # elif defined _MSC_VER
481 #   define BOOST_MSVC _MSC_VER
482
483     // turn off the warnings before we #include anything
484 #   pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
485 #   pragma warning( disable : 4503 ) // warning: decorated name length exceeded
486
487 #   if _MSC_VER <= 1200  // 1200 == VC++ 6.0
488 #     define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
489 #     define BOOST_NO_PRIVATE_IN_AGGREGATE
490 #     define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
491 #     define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
492
493 #     define BOOST_NO_INTEGRAL_INT64_T
494 #     define BOOST_NO_INTRINSIC_WCHAR_T
495
496 //    VC++ 6.0 has member templates but they have numerous problems including
497 //    cases of silent failure, so for safety we define:
498 #     define BOOST_NO_MEMBER_TEMPLATES
499 //    For VC++ experts wishing to attempt workarounds, we define:
500 #     define BOOST_MSVC6_MEMBER_TEMPLATES
501
502 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
503 #     define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
504 #     define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
505 #     define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
506 #     include <iterator>  // not sure this is the right way to do this -JGS
507 #     if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
508         // a perfectly good implementation of std::iterator is supplied
509         // A conforming allocator is supplied, but the compiler cannot cope
510         // when using "rebind".  (Douglas Gregor)
511 #       define BOOST_NO_STD_ALLOCATOR
512 #     elif defined(__SGI_STL_ITERATOR)
513 #       define BOOST_NO_STD_ITERATOR // No std::iterator in this case
514 #     elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
515         // full dinkumware 3.06 and above
516 #       define BOOST_NO_HASH
517 #       define BOOST_NO_STD_ITERATOR_TRAITS
518 #       ifndef _GLOBAL_USING    // can be defined in yvals.h
519 #         define BOOST_NO_STDC_NAMESPACE
520 #       endif
521 #       define BOOST_MSVC_STD_ITERATOR
522 #     else
523 #       define BOOST_MSVC_STD_ITERATOR
524 #       define BOOST_NO_SLIST
525 #       define BOOST_NO_HASH
526 #       define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
527 #       define BOOST_NO_STD_ALLOCATOR
528 #       ifndef _CPPLIB_VER
529           // Updated Dinkum library defines this, and provides
530           // its own min and max definitions.
531 #         define BOOST_NO_STD_MIN_MAX
532 #         undef min
533 #         undef max
534 #       endif
535 #       ifndef NOMINMAX
536           // avoid spurious NOMINMAX redefinition warning
537 #         define NOMINMAX
538 #       endif
539 #     endif
540 #     define BOOST_NO_STD_ITERATOR_TRAITS
541 #     define BOOST_NO_CV_VOID_SPECIALIZATIONS
542
543
544 // Make sure at least one standard library header is included so that library
545 // implementation detection will work, even if no standard headers have been
546 // included in front of a boost header. (Ed Brey 5 Jun 00)
547 #     include <cstddef>
548
549 // Determine if the standard library implementation is already pulling names
550 // into std.  STLport defines the following if so. (Ed Brey 5 Jun 00)
551 #     if !defined( __STL_IMPORT_VENDOR_CSTD ) || defined( __STL_NO_CSTD_FUNCTION_IMPORTS )
552 #       define BOOST_NO_STDC_NAMESPACE
553 #     endif
554
555 #   endif
556
557 #   if defined BOOST_DECL_EXPORTS
558 #     if defined BOOST_DECL_IMPORTS
559 #       error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
560 #     endif
561 #     define BOOST_DECL __declspec(dllexport)
562 #   elif defined BOOST_DECL_IMPORTS
563 #     define BOOST_DECL __declspec(dllimport)
564 #   else
565 #     define BOOST_DECL
566 #   endif
567
568 # endif // Microsoft (excluding Intel/EDG frontend) 
569
570 # ifndef BOOST_DECL
571 #   define BOOST_DECL  // default for compilers not needing this decoration.
572 # endif
573
574 //  end of compiler specific portion  ----------------------------------------//
575
576 #if defined(BOOST_NO_LIMITS) || (defined(_RWSTD_VER) && defined(__BORLANDC__) && _RWSTD_VER < 0x020300) || (defined(__SGI_STL_PORT) && __SGI_STL_PORT <= 0x410 && defined(__STL_STATIC_CONST_INIT_BUG))
577 // STLPort 4.0 doesn't define the static constants in numeric_limits<> so that they
578 // can be used at compile time if the compiler bug indicated by
579 // __STL_STATIC_CONST_INIT_BUG is present.
580
581 // Rogue wave STL (C++ Builder) also has broken numeric_limits
582 // with default template defining members out of line.
583 // However, Compaq C++ also uses RogueWave (version 0x0203) and it's ok.
584 #   define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
585 #endif
586
587 #if defined(__hpux)
588 // HP-UX has a nice stdint.h in a different location, see boost/cstdint.hpp
589 # define BOOST_SYSTEM_HAS_STDINT_H
590 #endif
591
592 #ifndef BOOST_STD_EXTENSION_NAMESPACE
593 # define BOOST_STD_EXTENSION_NAMESPACE std
594 #endif
595
596 // Check for old name "BOOST_NMEMBER_TEMPLATES" for compatibility  -----------//
597 // Don't use BOOST_NMEMBER_TEMPLATES. It is deprecated and will be removed soon.
598 #if defined( BOOST_NMEMBER_TEMPLATES ) && !defined( BOOST_NO_MEMBER_TEMPLATES )
599   #define BOOST_NO_MEMBER_TEMPLATES
600 #endif
601
602 //  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//
603 //
604 //  Because std::size_t usage is so common, even in boost headers which do not
605 //  otherwise use the C library, the <cstddef> workaround is included here so
606 //  that ugly workaround code need not appear in many other boost headers.
607 //  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef> 
608 //  must still be #included in the usual places so that <cstddef> inclusion
609 //  works as expected with standard conforming compilers.  The resulting
610 //  double inclusion of <cstddef> is harmless.
611
612 # ifdef BOOST_NO_STDC_NAMESPACE
613 #   include <cstddef>
614     namespace std { using ::ptrdiff_t; using ::size_t; }
615     // using ::wchar_t; removed since wchar_t is a C++ built-in type (Ed Brey)
616 # endif
617
618 #ifdef BOOST_NO_STD_MIN_MAX
619 namespace std {
620   template <class _Tp>
621   inline const _Tp& min(const _Tp& __a, const _Tp& __b) {
622     return __b < __a ? __b : __a;
623   }
624   template <class _Tp>
625   inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
626     return  __a < __b ? __b : __a;
627   }
628 #ifdef BOOST_MSVC
629   inline long min(long __a, long __b) {
630     return __b < __a ? __b : __a;
631   }
632   inline long max(long __a, long __b) {
633     return  __a < __b ? __b : __a;
634   }
635 #endif
636 }
637 #endif
638
639 // BOOST_STATIC_CONSTANT workaround --------------------------------------- //
640 // On compilers which don't allow in-class initialization of static integral
641 // constant members, we must use enums as a workaround if we want the constants
642 // to be available at compile-time. This macro gives us a convenient way to
643 // declare such constants.
644 #ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
645 # define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
646 #else
647 # define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
648 #endif
649
650 #endif  // BOOST_CONFIG_HPP
651
652
653
654
655
656
657