source: vendor/nemo/current/NEMOGCM/EXTERNAL/XIOS/extern/boost/include/boost/config/suffix.hpp @ 44

Last change on this file since 44 was 44, checked in by cholod, 12 years ago

Load NEMO_TMP into vendor/nemo/current.

File size: 19.6 KB
Line 
1//  Boost config.hpp configuration header file  ------------------------------//
2
3//  Copyright (c) 2001-2003 John Maddock
4//  Copyright (c) 2001 Darin Adler
5//  Copyright (c) 2001 Peter Dimov
6//  Copyright (c) 2002 Bill Kempf
7//  Copyright (c) 2002 Jens Maurer
8//  Copyright (c) 2002-2003 David Abrahams
9//  Copyright (c) 2003 Gennaro Prota
10//  Copyright (c) 2003 Eric Friedman
11//  Copyright (c) 2010 Eric Jourdanneau, Joel Falcou
12// Distributed under the Boost Software License, Version 1.0. (See
13// accompanying file LICENSE_1_0.txt or copy at
14// http://www.boost.org/LICENSE_1_0.txt)
15
16//  See http://www.boost.org/ for most recent version.
17
18//  Boost config.hpp policy and rationale documentation has been moved to
19//  http://www.boost.org/libs/config/
20//
21//  This file is intended to be stable, and relatively unchanging.
22//  It should contain boilerplate code only - no compiler specific
23//  code unless it is unavoidable - no changes unless unavoidable.
24
25#ifndef BOOST_CONFIG_SUFFIX_HPP
26#define BOOST_CONFIG_SUFFIX_HPP
27
28//
29// ensure that visibility macros are always defined, thus symplifying use
30//
31#ifndef BOOST_SYMBOL_EXPORT
32# define BOOST_SYMBOL_EXPORT
33#endif
34#ifndef BOOST_SYMBOL_IMPORT
35# define BOOST_SYMBOL_IMPORT
36#endif
37#ifndef BOOST_SYMBOL_VISIBLE
38# define BOOST_SYMBOL_VISIBLE
39#endif
40
41//
42// look for long long by looking for the appropriate macros in <limits.h>.
43// Note that we use limits.h rather than climits for maximal portability,
44// remember that since these just declare a bunch of macros, there should be
45// no namespace issues from this.
46//
47#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \
48   && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
49# include <limits.h>
50# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
51#   define BOOST_HAS_LONG_LONG
52# else
53#   define BOOST_NO_LONG_LONG
54# endif
55#endif
56
57// GCC 3.x will clean up all of those nasty macro definitions that
58// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
59// it under GCC 3.x.
60#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
61#  undef BOOST_NO_CTYPE_FUNCTIONS
62#endif
63
64//
65// Assume any extensions are in namespace std:: unless stated otherwise:
66//
67#  ifndef BOOST_STD_EXTENSION_NAMESPACE
68#    define BOOST_STD_EXTENSION_NAMESPACE std
69#  endif
70
71//
72// If cv-qualified specializations are not allowed, then neither are cv-void ones:
73//
74#  if defined(BOOST_NO_CV_SPECIALIZATIONS) \
75      && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
76#     define BOOST_NO_CV_VOID_SPECIALIZATIONS
77#  endif
78
79//
80// If there is no numeric_limits template, then it can't have any compile time
81// constants either!
82//
83#  if defined(BOOST_NO_LIMITS) \
84      && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
85#     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
86#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
87#     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
88#  endif
89
90//
91// if there is no long long then there is no specialisation
92// for numeric_limits<long long> either:
93//
94#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
95#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
96#endif
97
98//
99// Normalize BOOST_NO_STATIC_ASSERT and (depricated) BOOST_HAS_STATIC_ASSERT:
100//
101#if !defined(BOOST_NO_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT)
102#  define BOOST_HAS_STATIC_ASSERT
103#endif
104
105//
106// if there is no __int64 then there is no specialisation
107// for numeric_limits<__int64> either:
108//
109#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
110#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
111#endif
112
113//
114// if member templates are supported then so is the
115// VC6 subset of member templates:
116//
117#  if !defined(BOOST_NO_MEMBER_TEMPLATES) \
118       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
119#     define BOOST_MSVC6_MEMBER_TEMPLATES
120#  endif
121
122//
123// Without partial specialization, can't test for partial specialisation bugs:
124//
125#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
126      && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
127#     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
128#  endif
129
130//
131// Without partial specialization, we can't have array-type partial specialisations:
132//
133#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
134      && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
135#     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
136#  endif
137
138//
139// Without partial specialization, std::iterator_traits can't work:
140//
141#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
142      && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
143#     define BOOST_NO_STD_ITERATOR_TRAITS
144#  endif
145
146//
147// Without partial specialization, partial
148// specialization with default args won't work either:
149//
150#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
151      && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
152#     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
153#  endif
154
155//
156// Without member template support, we can't have template constructors
157// in the standard library either:
158//
159#  if defined(BOOST_NO_MEMBER_TEMPLATES) \
160      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
161      && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
162#     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
163#  endif
164
165//
166// Without member template support, we can't have a conforming
167// std::allocator template either:
168//
169#  if defined(BOOST_NO_MEMBER_TEMPLATES) \
170      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
171      && !defined(BOOST_NO_STD_ALLOCATOR)
172#     define BOOST_NO_STD_ALLOCATOR
173#  endif
174
175//
176// without ADL support then using declarations will break ADL as well:
177//
178#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
179#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
180#endif
181
182//
183// Without typeid support we have no dynamic RTTI either:
184//
185#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)
186#  define BOOST_NO_RTTI
187#endif
188
189//
190// If we have a standard allocator, then we have a partial one as well:
191//
192#if !defined(BOOST_NO_STD_ALLOCATOR)
193#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
194#endif
195
196//
197// We can't have a working std::use_facet if there is no std::locale:
198//
199#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
200#     define BOOST_NO_STD_USE_FACET
201#  endif
202
203//
204// We can't have a std::messages facet if there is no std::locale:
205//
206#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
207#     define BOOST_NO_STD_MESSAGES
208#  endif
209
210//
211// We can't have a working std::wstreambuf if there is no std::locale:
212//
213#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
214#     define BOOST_NO_STD_WSTREAMBUF
215#  endif
216
217//
218// We can't have a <cwctype> if there is no <cwchar>:
219//
220#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
221#     define BOOST_NO_CWCTYPE
222#  endif
223
224//
225// We can't have a swprintf if there is no <cwchar>:
226//
227#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
228#     define BOOST_NO_SWPRINTF
229#  endif
230
231//
232// If Win32 support is turned off, then we must turn off
233// threading support also, unless there is some other
234// thread API enabled:
235//
236#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
237   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
238#  define BOOST_DISABLE_THREADS
239#endif
240
241//
242// Turn on threading support if the compiler thinks that it's in
243// multithreaded mode.  We put this here because there are only a
244// limited number of macros that identify this (if there's any missing
245// from here then add to the appropriate compiler section):
246//
247#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
248    || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \
249    && !defined(BOOST_HAS_THREADS)
250#  define BOOST_HAS_THREADS
251#endif
252
253//
254// Turn threading support off if BOOST_DISABLE_THREADS is defined:
255//
256#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
257#  undef BOOST_HAS_THREADS
258#endif
259
260//
261// Turn threading support off if we don't recognise the threading API:
262//
263#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
264      && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
265      && !defined(BOOST_HAS_MPTASKS)
266#  undef BOOST_HAS_THREADS
267#endif
268
269//
270// Turn threading detail macros off if we don't (want to) use threading
271//
272#ifndef BOOST_HAS_THREADS
273#  undef BOOST_HAS_PTHREADS
274#  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
275#  undef BOOST_HAS_PTHREAD_YIELD
276#  undef BOOST_HAS_PTHREAD_DELAY_NP
277#  undef BOOST_HAS_WINTHREADS
278#  undef BOOST_HAS_BETHREADS
279#  undef BOOST_HAS_MPTASKS
280#endif
281
282//
283// If the compiler claims to be C99 conformant, then it had better
284// have a <stdint.h>:
285//
286#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
287#     define BOOST_HAS_STDINT_H
288#     ifndef BOOST_HAS_LOG1P
289#        define BOOST_HAS_LOG1P
290#     endif
291#     ifndef BOOST_HAS_EXPM1
292#        define BOOST_HAS_EXPM1
293#     endif
294#  endif
295
296//
297// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
298// Note that this is for backwards compatibility only.
299//
300#  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)
301#     define BOOST_NO_SLIST
302#  endif
303
304#  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)
305#     define BOOST_NO_HASH
306#  endif
307
308//
309// Set BOOST_SLIST_HEADER if not set already:
310//
311#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
312#  define BOOST_SLIST_HEADER <slist>
313#endif
314
315//
316// Set BOOST_HASH_SET_HEADER if not set already:
317//
318#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
319#  define BOOST_HASH_SET_HEADER <hash_set>
320#endif
321
322//
323// Set BOOST_HASH_MAP_HEADER if not set already:
324//
325#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
326#  define BOOST_HASH_MAP_HEADER <hash_map>
327#endif
328
329//
330// Set BOOST_NO_INITIALIZER_LISTS if there is no library support.
331//
332
333#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)
334#  define BOOST_NO_INITIALIZER_LISTS
335#endif
336
337//
338// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined
339//
340#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS)
341#define BOOST_HAS_RVALUE_REFS
342#endif
343
344//  BOOST_HAS_ABI_HEADERS
345//  This macro gets set if we have headers that fix the ABI,
346//  and prevent ODR violations when linking to external libraries:
347#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
348#  define BOOST_HAS_ABI_HEADERS
349#endif
350
351#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
352#  undef BOOST_HAS_ABI_HEADERS
353#endif
354
355//  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//
356//  Because std::size_t usage is so common, even in boost headers which do not
357//  otherwise use the C library, the <cstddef> workaround is included here so
358//  that ugly workaround code need not appear in many other boost headers.
359//  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
360//  must still be #included in the usual places so that <cstddef> inclusion
361//  works as expected with standard conforming compilers.  The resulting
362//  double inclusion of <cstddef> is harmless.
363
364# ifdef BOOST_NO_STDC_NAMESPACE
365#   include <cstddef>
366    namespace std { using ::ptrdiff_t; using ::size_t; }
367# endif
368
369//  Workaround for the unfortunate min/max macros defined by some platform headers
370
371#define BOOST_PREVENT_MACRO_SUBSTITUTION
372
373#ifndef BOOST_USING_STD_MIN
374#  define BOOST_USING_STD_MIN() using std::min
375#endif
376
377#ifndef BOOST_USING_STD_MAX
378#  define BOOST_USING_STD_MAX() using std::max
379#endif
380
381//  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//
382
383#  ifdef BOOST_NO_STD_MIN_MAX
384
385namespace std {
386  template <class _Tp>
387  inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
388    return __b < __a ? __b : __a;
389  }
390  template <class _Tp>
391  inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
392    return  __a < __b ? __b : __a;
393  }
394}
395
396#  endif
397
398// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
399// On compilers which don't allow in-class initialization of static integral
400// constant members, we must use enums as a workaround if we want the constants
401// to be available at compile-time. This macro gives us a convenient way to
402// declare such constants.
403
404#  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
405#       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
406#  else
407#     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
408#  endif
409
410// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
411// When the standard library does not have a conforming std::use_facet there
412// are various workarounds available, but they differ from library to library.
413// The same problem occurs with has_facet.
414// These macros provide a consistent way to access a locale's facets.
415// Usage:
416//    replace
417//       std::use_facet<Type>(loc);
418//    with
419//       BOOST_USE_FACET(Type, loc);
420//    Note do not add a std:: prefix to the front of BOOST_USE_FACET!
421//  Use for BOOST_HAS_FACET is analogous.
422
423#if defined(BOOST_NO_STD_USE_FACET)
424#  ifdef BOOST_HAS_TWO_ARG_USE_FACET
425#     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
426#     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
427#  elif defined(BOOST_HAS_MACRO_USE_FACET)
428#     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
429#     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
430#  elif defined(BOOST_HAS_STLP_USE_FACET)
431#     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
432#     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
433#  endif
434#else
435#  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
436#  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
437#endif
438
439// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
440// Member templates are supported by some compilers even though they can't use
441// the A::template member<U> syntax, as a workaround replace:
442//
443// typedef typename A::template rebind<U> binder;
444//
445// with:
446//
447// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
448
449#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
450#  define BOOST_NESTED_TEMPLATE template
451#else
452#  define BOOST_NESTED_TEMPLATE
453#endif
454
455// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
456// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
457// is defined, in which case it evaluates to return x; Use when you have a return
458// statement that can never be reached.
459
460#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
461#  define BOOST_UNREACHABLE_RETURN(x) return x;
462#else
463#  define BOOST_UNREACHABLE_RETURN(x)
464#endif
465
466// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
467//
468// Some compilers don't support the use of `typename' for dependent
469// types in deduced contexts, e.g.
470//
471//     template <class T> void f(T, typename T::type);
472//                                  ^^^^^^^^
473// Replace these declarations with:
474//
475//     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
476
477#ifndef BOOST_NO_DEDUCED_TYPENAME
478#  define BOOST_DEDUCED_TYPENAME typename
479#else
480#  define BOOST_DEDUCED_TYPENAME
481#endif
482
483#ifndef BOOST_NO_TYPENAME_WITH_CTOR
484#  define BOOST_CTOR_TYPENAME typename
485#else
486#  define BOOST_CTOR_TYPENAME
487#endif
488
489// long long workaround ------------------------------------------//
490// On gcc (and maybe other compilers?) long long is alway supported
491// but it's use may generate either warnings (with -ansi), or errors
492// (with -pedantic -ansi) unless it's use is prefixed by __extension__
493//
494#if defined(BOOST_HAS_LONG_LONG)
495namespace boost{
496#  ifdef __GNUC__
497   __extension__ typedef long long long_long_type;
498   __extension__ typedef unsigned long long ulong_long_type;
499#  else
500   typedef long long long_long_type;
501   typedef unsigned long long ulong_long_type;
502#  endif
503}
504#endif
505
506// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
507//
508// Some compilers have problems with function templates whose template
509// parameters don't appear in the function parameter list (basically
510// they just link one instantiation of the template in the final
511// executable). These macros provide a uniform way to cope with the
512// problem with no effects on the calling syntax.
513
514// Example:
515//
516//  #include <iostream>
517//  #include <ostream>
518//  #include <typeinfo>
519//
520//  template <int n>
521//  void f() { std::cout << n << ' '; }
522//
523//  template <typename T>
524//  void g() { std::cout << typeid(T).name() << ' '; }
525//
526//  int main() {
527//    f<1>();
528//    f<2>();
529//
530//    g<int>();
531//    g<double>();
532//  }
533//
534// With VC++ 6.0 the output is:
535//
536//   2 2 double double
537//
538// To fix it, write
539//
540//   template <int n>
541//   void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
542//
543//   template <typename T>
544//   void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }
545//
546
547
548#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
549
550#  include "boost/type.hpp"
551#  include "boost/non_type.hpp"
552
553#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)              boost::type<t>* = 0
554#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)         boost::type<t>*
555#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)       boost::non_type<t, v>* = 0
556#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  boost::non_type<t, v>*
557
558#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)        \
559             , BOOST_EXPLICIT_TEMPLATE_TYPE(t)
560#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)   \
561             , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
562#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \
563             , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
564#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)    \
565             , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
566
567#else
568
569// no workaround needed: expand to nothing
570
571#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
572#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
573#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
574#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
575
576#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
577#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
578#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
579#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
580
581
582#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
583
584// When BOOST_NO_STD_TYPEINFO is defined, we can just import
585// the global definition into std namespace:
586#ifdef BOOST_NO_STD_TYPEINFO
587#include <typeinfo>
588namespace std{ using ::typeinfo; }
589#endif
590
591// ---------------------------------------------------------------------------//
592
593//
594// Helper macro BOOST_STRINGIZE:
595// Converts the parameter X to a string after macro replacement
596// on X has been performed.
597//
598#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
599#define BOOST_DO_STRINGIZE(X) #X
600
601//
602// Helper macro BOOST_JOIN:
603// The following piece of macro magic joins the two
604// arguments together, even when one of the arguments is
605// itself a macro (see 16.3.1 in C++ standard).  The key
606// is that macro expansion of macro arguments does not
607// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
608//
609#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
610#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
611#define BOOST_DO_JOIN2( X, Y ) X##Y
612
613//
614// Set some default values for compiler/library/platform names.
615// These are for debugging config setup only:
616//
617#  ifndef BOOST_COMPILER
618#     define BOOST_COMPILER "Unknown ISO C++ Compiler"
619#  endif
620#  ifndef BOOST_STDLIB
621#     define BOOST_STDLIB "Unknown ISO standard library"
622#  endif
623#  ifndef BOOST_PLATFORM
624#     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
625         || defined(_POSIX_SOURCE)
626#        define BOOST_PLATFORM "Generic Unix"
627#     else
628#        define BOOST_PLATFORM "Unknown"
629#     endif
630#  endif
631
632//
633// Set some default values GPU support
634//
635#  ifndef BOOST_GPU_ENABLED
636#  define BOOST_GPU_ENABLED
637#  endif
638#endif
639
Note: See TracBrowser for help on using the repository browser.