suffix.hpp
Go to the documentation of this file.
00001 //  Boost config.hpp configuration header file  ------------------------------//
00002 
00003 //  Copyright (c) 2001-2003 John Maddock
00004 //  Copyright (c) 2001 Darin Adler
00005 //  Copyright (c) 2001 Peter Dimov
00006 //  Copyright (c) 2002 Bill Kempf 
00007 //  Copyright (c) 2002 Jens Maurer
00008 //  Copyright (c) 2002-2003 David Abrahams
00009 //  Copyright (c) 2003 Gennaro Prota
00010 //  Copyright (c) 2003 Eric Friedman
00011 //
00012 // Distributed under the Boost Software License, Version 1.0. (See
00013 // accompanying file LICENSE_1_0.txt or copy at
00014 // http://www.boost.org/LICENSE_1_0.txt)
00015 
00016 //  See http://www.boost.org/ for most recent version.
00017 
00018 //  Boost config.hpp policy and rationale documentation has been moved to
00019 //  http://www.boost.org/libs/config/
00020 //
00021 //  This file is intended to be stable, and relatively unchanging.
00022 //  It should contain boilerplate code only - no compiler specific
00023 //  code unless it is unavoidable - no changes unless unavoidable.
00024 
00025 #ifndef BOOST_CONFIG_SUFFIX_HPP
00026 #define BOOST_CONFIG_SUFFIX_HPP
00027 
00028 //
00029 // look for long long by looking for the appropriate macros in <limits.h>.
00030 // Note that we use limits.h rather than climits for maximal portability,
00031 // remember that since these just declare a bunch of macros, there should be
00032 // no namespace issues from this.
00033 //
00034 #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \
00035    && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
00036 # include <limits.h>
00037 # if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
00038 #   define BOOST_HAS_LONG_LONG
00039 # else
00040 #   define BOOST_NO_LONG_LONG
00041 # endif
00042 #endif
00043 
00044 // GCC 3.x will clean up all of those nasty macro definitions that
00045 // BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
00046 // it under GCC 3.x.
00047 #if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
00048 #  undef BOOST_NO_CTYPE_FUNCTIONS
00049 #endif
00050 
00051 //
00052 // Assume any extensions are in namespace std:: unless stated otherwise:
00053 //
00054 #  ifndef BOOST_STD_EXTENSION_NAMESPACE
00055 #    define BOOST_STD_EXTENSION_NAMESPACE std
00056 #  endif
00057 
00058 //
00059 // If cv-qualified specializations are not allowed, then neither are cv-void ones:
00060 //
00061 #  if defined(BOOST_NO_CV_SPECIALIZATIONS) \
00062       && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
00063 #     define BOOST_NO_CV_VOID_SPECIALIZATIONS
00064 #  endif
00065 
00066 //
00067 // If there is no numeric_limits template, then it can't have any compile time
00068 // constants either!
00069 //
00070 #  if defined(BOOST_NO_LIMITS) \
00071       && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
00072 #     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
00073 #     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
00074 #     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
00075 #  endif
00076 
00077 //
00078 // if there is no long long then there is no specialisation
00079 // for numeric_limits<long long> either:
00080 //
00081 #if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
00082 #  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
00083 #endif
00084 
00085 //
00086 // if there is no __int64 then there is no specialisation
00087 // for numeric_limits<__int64> either:
00088 //
00089 #if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
00090 #  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
00091 #endif
00092 
00093 //
00094 // if member templates are supported then so is the
00095 // VC6 subset of member templates:
00096 //
00097 #  if !defined(BOOST_NO_MEMBER_TEMPLATES) \
00098        && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
00099 #     define BOOST_MSVC6_MEMBER_TEMPLATES
00100 #  endif
00101 
00102 //
00103 // Without partial specialization, can't test for partial specialisation bugs:
00104 //
00105 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
00106       && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
00107 #     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
00108 #  endif
00109 
00110 //
00111 // Without partial specialization, we can't have array-type partial specialisations:
00112 //
00113 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
00114       && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
00115 #     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
00116 #  endif
00117 
00118 //
00119 // Without partial specialization, std::iterator_traits can't work:
00120 //
00121 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
00122       && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
00123 #     define BOOST_NO_STD_ITERATOR_TRAITS
00124 #  endif
00125 
00126 //
00127 // Without partial specialization, partial 
00128 // specialization with default args won't work either:
00129 //
00130 #  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
00131       && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
00132 #     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
00133 #  endif
00134 
00135 //
00136 // Without member template support, we can't have template constructors
00137 // in the standard library either:
00138 //
00139 #  if defined(BOOST_NO_MEMBER_TEMPLATES) \
00140       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
00141       && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
00142 #     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
00143 #  endif
00144 
00145 //
00146 // Without member template support, we can't have a conforming
00147 // std::allocator template either:
00148 //
00149 #  if defined(BOOST_NO_MEMBER_TEMPLATES) \
00150       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
00151       && !defined(BOOST_NO_STD_ALLOCATOR)
00152 #     define BOOST_NO_STD_ALLOCATOR
00153 #  endif
00154 
00155 //
00156 // without ADL support then using declarations will break ADL as well:
00157 //
00158 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
00159 #  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
00160 #endif
00161 
00162 //
00163 // Without typeid support we have no dynamic RTTI either:
00164 //
00165 #if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)
00166 #  define BOOST_NO_RTTI
00167 #endif
00168 
00169 //
00170 // If we have a standard allocator, then we have a partial one as well:
00171 //
00172 #if !defined(BOOST_NO_STD_ALLOCATOR)
00173 #  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
00174 #endif
00175 
00176 //
00177 // We can't have a working std::use_facet if there is no std::locale:
00178 //
00179 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
00180 #     define BOOST_NO_STD_USE_FACET
00181 #  endif
00182 
00183 //
00184 // We can't have a std::messages facet if there is no std::locale:
00185 //
00186 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
00187 #     define BOOST_NO_STD_MESSAGES
00188 #  endif
00189 
00190 //
00191 // We can't have a working std::wstreambuf if there is no std::locale:
00192 //
00193 #  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
00194 #     define BOOST_NO_STD_WSTREAMBUF
00195 #  endif
00196 
00197 //
00198 // We can't have a <cwctype> if there is no <cwchar>:
00199 //
00200 #  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
00201 #     define BOOST_NO_CWCTYPE
00202 #  endif
00203 
00204 //
00205 // We can't have a swprintf if there is no <cwchar>:
00206 //
00207 #  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
00208 #     define BOOST_NO_SWPRINTF
00209 #  endif
00210 
00211 //
00212 // If Win32 support is turned off, then we must turn off
00213 // threading support also, unless there is some other
00214 // thread API enabled:
00215 //
00216 #if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
00217    && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
00218 #  define BOOST_DISABLE_THREADS
00219 #endif
00220 
00221 //
00222 // Turn on threading support if the compiler thinks that it's in
00223 // multithreaded mode.  We put this here because there are only a
00224 // limited number of macros that identify this (if there's any missing
00225 // from here then add to the appropriate compiler section):
00226 //
00227 #if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
00228     || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \
00229     && !defined(BOOST_HAS_THREADS)
00230 #  define BOOST_HAS_THREADS
00231 #endif
00232 
00233 //
00234 // Turn threading support off if BOOST_DISABLE_THREADS is defined:
00235 //
00236 #if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
00237 #  undef BOOST_HAS_THREADS
00238 #endif
00239 
00240 //
00241 // Turn threading support off if we don't recognise the threading API:
00242 //
00243 #if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
00244       && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
00245       && !defined(BOOST_HAS_MPTASKS)
00246 #  undef BOOST_HAS_THREADS
00247 #endif
00248 
00249 //
00250 // Turn threading detail macros off if we don't (want to) use threading
00251 //
00252 #ifndef BOOST_HAS_THREADS
00253 #  undef BOOST_HAS_PTHREADS
00254 #  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
00255 #  undef BOOST_HAS_PTHREAD_YIELD
00256 #  undef BOOST_HAS_PTHREAD_DELAY_NP
00257 #  undef BOOST_HAS_WINTHREADS
00258 #  undef BOOST_HAS_BETHREADS
00259 #  undef BOOST_HAS_MPTASKS
00260 #endif
00261 
00262 //
00263 // If the compiler claims to be C99 conformant, then it had better
00264 // have a <stdint.h>:
00265 //
00266 #  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
00267 #     define BOOST_HAS_STDINT_H
00268 #     ifndef BOOST_HAS_LOG1P
00269 #        define BOOST_HAS_LOG1P
00270 #     endif
00271 #     ifndef BOOST_HAS_EXPM1
00272 #        define BOOST_HAS_EXPM1
00273 #     endif
00274 #  endif
00275 
00276 //
00277 // Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
00278 // Note that this is for backwards compatibility only.
00279 //
00280 #  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)
00281 #     define BOOST_NO_SLIST
00282 #  endif
00283 
00284 #  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)
00285 #     define BOOST_NO_HASH
00286 #  endif
00287 
00288 //
00289 // Set BOOST_SLIST_HEADER if not set already:
00290 //
00291 #if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
00292 #  define BOOST_SLIST_HEADER <slist>
00293 #endif
00294 
00295 //
00296 // Set BOOST_HASH_SET_HEADER if not set already:
00297 //
00298 #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
00299 #  define BOOST_HASH_SET_HEADER <hash_set>
00300 #endif
00301 
00302 //
00303 // Set BOOST_HASH_MAP_HEADER if not set already:
00304 //
00305 #if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
00306 #  define BOOST_HASH_MAP_HEADER <hash_map>
00307 #endif
00308 
00309 //  BOOST_HAS_ABI_HEADERS
00310 //  This macro gets set if we have headers that fix the ABI,
00311 //  and prevent ODR violations when linking to external libraries:
00312 #if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
00313 #  define BOOST_HAS_ABI_HEADERS
00314 #endif
00315 
00316 #if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
00317 #  undef BOOST_HAS_ABI_HEADERS
00318 #endif
00319 
00320 //  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//
00321 //  Because std::size_t usage is so common, even in boost headers which do not
00322 //  otherwise use the C library, the <cstddef> workaround is included here so
00323 //  that ugly workaround code need not appear in many other boost headers.
00324 //  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
00325 //  must still be #included in the usual places so that <cstddef> inclusion
00326 //  works as expected with standard conforming compilers.  The resulting
00327 //  double inclusion of <cstddef> is harmless.
00328 
00329 # ifdef BOOST_NO_STDC_NAMESPACE
00330 #   include <cstddef>
00331     namespace std { using ::ptrdiff_t; using ::size_t; }
00332 # endif
00333 
00334 //  Workaround for the unfortunate min/max macros defined by some platform headers
00335 
00336 #define BOOST_PREVENT_MACRO_SUBSTITUTION
00337 
00338 #ifndef BOOST_USING_STD_MIN
00339 #  define BOOST_USING_STD_MIN() using std::min
00340 #endif
00341 
00342 #ifndef BOOST_USING_STD_MAX
00343 #  define BOOST_USING_STD_MAX() using std::max
00344 #endif
00345 
00346 //  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//
00347 
00348 #  ifdef BOOST_NO_STD_MIN_MAX
00349 
00350 namespace std {
00351   template <class _Tp>
00352   inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
00353     return __b < __a ? __b : __a;
00354   }
00355   template <class _Tp>
00356   inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
00357     return  __a < __b ? __b : __a;
00358   }
00359 }
00360 
00361 #  endif
00362 
00363 // BOOST_STATIC_CONSTANT workaround --------------------------------------- //
00364 // On compilers which don't allow in-class initialization of static integral
00365 // constant members, we must use enums as a workaround if we want the constants
00366 // to be available at compile-time. This macro gives us a convenient way to
00367 // declare such constants.
00368 
00369 #  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
00370 #       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
00371 #  else
00372 #     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
00373 #  endif
00374 
00375 // BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
00376 // When the standard library does not have a conforming std::use_facet there
00377 // are various workarounds available, but they differ from library to library.
00378 // The same problem occurs with has_facet.
00379 // These macros provide a consistent way to access a locale's facets.
00380 // Usage:
00381 //    replace
00382 //       std::use_facet<Type>(loc);
00383 //    with
00384 //       BOOST_USE_FACET(Type, loc);
00385 //    Note do not add a std:: prefix to the front of BOOST_USE_FACET!
00386 //  Use for BOOST_HAS_FACET is analogous.
00387 
00388 #if defined(BOOST_NO_STD_USE_FACET)
00389 #  ifdef BOOST_HAS_TWO_ARG_USE_FACET
00390 #     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
00391 #     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
00392 #  elif defined(BOOST_HAS_MACRO_USE_FACET)
00393 #     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
00394 #     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
00395 #  elif defined(BOOST_HAS_STLP_USE_FACET)
00396 #     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
00397 #     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
00398 #  endif
00399 #else
00400 #  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
00401 #  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
00402 #endif
00403 
00404 // BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
00405 // Member templates are supported by some compilers even though they can't use
00406 // the A::template member<U> syntax, as a workaround replace:
00407 //
00408 // typedef typename A::template rebind<U> binder;
00409 //
00410 // with:
00411 //
00412 // typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
00413 
00414 #ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
00415 #  define BOOST_NESTED_TEMPLATE template
00416 #else
00417 #  define BOOST_NESTED_TEMPLATE
00418 #endif
00419 
00420 // BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
00421 // Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
00422 // is defined, in which case it evaluates to return x; Use when you have a return
00423 // statement that can never be reached.
00424 
00425 #ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
00426 #  define BOOST_UNREACHABLE_RETURN(x) return x;
00427 #else
00428 #  define BOOST_UNREACHABLE_RETURN(x)
00429 #endif
00430 
00431 // BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
00432 //
00433 // Some compilers don't support the use of `typename' for dependent
00434 // types in deduced contexts, e.g.
00435 //
00436 //     template <class T> void f(T, typename T::type);
00437 //                                  ^^^^^^^^
00438 // Replace these declarations with:
00439 //
00440 //     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
00441 
00442 #ifndef BOOST_NO_DEDUCED_TYPENAME
00443 #  define BOOST_DEDUCED_TYPENAME typename
00444 #else
00445 #  define BOOST_DEDUCED_TYPENAME
00446 #endif
00447 
00448 #ifndef BOOST_NO_TYPENAME_WITH_CTOR
00449 #  define BOOST_CTOR_TYPENAME typename
00450 #else
00451 #  define BOOST_CTOR_TYPENAME
00452 #endif
00453 
00454 // long long workaround ------------------------------------------//
00455 // On gcc (and maybe other compilers?) long long is alway supported
00456 // but it's use may generate either warnings (with -ansi), or errors
00457 // (with -pedantic -ansi) unless it's use is prefixed by __extension__
00458 //
00459 #if defined(BOOST_HAS_LONG_LONG)
00460 namespace boost{
00461 #  ifdef __GNUC__
00462    __extension__ typedef long long long_long_type;
00463    __extension__ typedef unsigned long long ulong_long_type;
00464 #  else
00465    typedef long long long_long_type;
00466    typedef unsigned long long ulong_long_type;
00467 #  endif
00468 }
00469 #endif
00470 
00471 // BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
00472 //
00473 // Some compilers have problems with function templates whose template
00474 // parameters don't appear in the function parameter list (basically
00475 // they just link one instantiation of the template in the final
00476 // executable). These macros provide a uniform way to cope with the
00477 // problem with no effects on the calling syntax.
00478 
00479 // Example:
00480 //
00481 //  #include <iostream>
00482 //  #include <ostream>
00483 //  #include <typeinfo>
00484 //
00485 //  template <int n>
00486 //  void f() { std::cout << n << ' '; }
00487 //
00488 //  template <typename T>
00489 //  void g() { std::cout << typeid(T).name() << ' '; }
00490 //
00491 //  int main() {
00492 //    f<1>();
00493 //    f<2>();
00494 //
00495 //    g<int>();
00496 //    g<double>();
00497 //  }
00498 //
00499 // With VC++ 6.0 the output is:
00500 //
00501 //   2 2 double double
00502 //
00503 // To fix it, write
00504 //
00505 //   template <int n>
00506 //   void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
00507 //
00508 //   template <typename T>
00509 //   void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }
00510 //
00511 
00512 
00513 #if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
00514 
00515 #  include "boost/type.hpp"
00516 #  include "boost/non_type.hpp"
00517 
00518 #  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)              boost::type<t>* = 0
00519 #  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)         boost::type<t>*
00520 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)       boost::non_type<t, v>* = 0
00521 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  boost::non_type<t, v>*
00522 
00523 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)        \
00524              , BOOST_EXPLICIT_TEMPLATE_TYPE(t)
00525 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)   \
00526              , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
00527 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \
00528              , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
00529 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)    \
00530              , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
00531 
00532 #else
00533 
00534 // no workaround needed: expand to nothing
00535 
00536 #  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
00537 #  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
00538 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
00539 #  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
00540 
00541 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
00542 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
00543 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
00544 #  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
00545 
00546 
00547 #endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
00548 
00549 
00550 // ---------------------------------------------------------------------------//
00551 
00552 //
00553 // Helper macro BOOST_STRINGIZE:
00554 // Converts the parameter X to a string after macro replacement
00555 // on X has been performed.
00556 //
00557 #define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
00558 #define BOOST_DO_STRINGIZE(X) #X
00559 
00560 //
00561 // Helper macro BOOST_JOIN:
00562 // The following piece of macro magic joins the two
00563 // arguments together, even when one of the arguments is
00564 // itself a macro (see 16.3.1 in C++ standard).  The key
00565 // is that macro expansion of macro arguments does not
00566 // occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
00567 //
00568 #define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
00569 #define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
00570 #define BOOST_DO_JOIN2( X, Y ) X##Y
00571 
00572 //
00573 // Set some default values for compiler/library/platform names.
00574 // These are for debugging config setup only:
00575 //
00576 #  ifndef BOOST_COMPILER
00577 #     define BOOST_COMPILER "Unknown ISO C++ Compiler"
00578 #  endif
00579 #  ifndef BOOST_STDLIB
00580 #     define BOOST_STDLIB "Unknown ISO standard library"
00581 #  endif
00582 #  ifndef BOOST_PLATFORM
00583 #     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
00584          || defined(_POSIX_SOURCE)
00585 #        define BOOST_PLATFORM "Generic Unix"
00586 #     else
00587 #        define BOOST_PLATFORM "Unknown"
00588 #     endif
00589 #  endif
00590 
00591 #endif
00592 
00593 


appl
Author(s): petercai
autogenerated on Tue Jan 7 2014 11:02:29