1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/config/suffix.hpp Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -0,0 +1,569 @@
1.4 +// Boost config.hpp configuration header file ------------------------------//
1.5 +
1.6 +// (C) Copyright John Maddock 2001 - 2003.
1.7 +// (C) Copyright Darin Adler 2001.
1.8 +// (C) Copyright Peter Dimov 2001.
1.9 +// (C) Copyright Bill Kempf 2002.
1.10 +// (C) Copyright Jens Maurer 2002.
1.11 +// (C) Copyright David Abrahams 2002 - 2003.
1.12 +// (C) Copyright Gennaro Prota 2003.
1.13 +// (C) Copyright Eric Friedman 2003.
1.14 +// Use, modification and distribution are subject to the
1.15 +// Boost Software License, Version 1.0. (See accompanying file
1.16 +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
1.17 +
1.18 +// See http://www.boost.org for most recent version.
1.19 +
1.20 +// Boost config.hpp policy and rationale documentation has been moved to
1.21 +// http://www.boost.org/libs/config
1.22 +//
1.23 +// This file is intended to be stable, and relatively unchanging.
1.24 +// It should contain boilerplate code only - no compiler specific
1.25 +// code unless it is unavoidable - no changes unless unavoidable.
1.26 +
1.27 +#ifndef BOOST_CONFIG_SUFFIX_HPP
1.28 +#define BOOST_CONFIG_SUFFIX_HPP
1.29 +
1.30 +//
1.31 +// look for long long by looking for the appropriate macros in <limits.h>.
1.32 +// Note that we use limits.h rather than climits for maximal portability,
1.33 +// remember that since these just declare a bunch of macros, there should be
1.34 +// no namespace issues from this.
1.35 +//
1.36 +#if !defined(BOOST_HAS_LONG_LONG) \
1.37 + && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
1.38 +# include <limits.h>
1.39 +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
1.40 +# define BOOST_HAS_LONG_LONG
1.41 +# endif
1.42 +#endif
1.43 +
1.44 +// GCC 3.x will clean up all of those nasty macro definitions that
1.45 +// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
1.46 +// it under GCC 3.x.
1.47 +#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
1.48 +# undef BOOST_NO_CTYPE_FUNCTIONS
1.49 +#endif
1.50 +
1.51 +
1.52 +//
1.53 +// Assume any extensions are in namespace std:: unless stated otherwise:
1.54 +//
1.55 +# ifndef BOOST_STD_EXTENSION_NAMESPACE
1.56 +# define BOOST_STD_EXTENSION_NAMESPACE std
1.57 +# endif
1.58 +
1.59 +//
1.60 +// If cv-qualified specializations are not allowed, then neither are cv-void ones:
1.61 +//
1.62 +# if defined(BOOST_NO_CV_SPECIALIZATIONS) \
1.63 + && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
1.64 +# define BOOST_NO_CV_VOID_SPECIALIZATIONS
1.65 +# endif
1.66 +
1.67 +//
1.68 +// If there is no numeric_limits template, then it can't have any compile time
1.69 +// constants either!
1.70 +//
1.71 +# if defined(BOOST_NO_LIMITS) \
1.72 + && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
1.73 +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
1.74 +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
1.75 +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
1.76 +# endif
1.77 +
1.78 +//
1.79 +// if there is no long long then there is no specialisation
1.80 +// for numeric_limits<long long> either:
1.81 +//
1.82 +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
1.83 +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
1.84 +#endif
1.85 +
1.86 +//
1.87 +// if there is no __int64 then there is no specialisation
1.88 +// for numeric_limits<__int64> either:
1.89 +//
1.90 +#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
1.91 +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
1.92 +#endif
1.93 +
1.94 +//
1.95 +// if member templates are supported then so is the
1.96 +// VC6 subset of member templates:
1.97 +//
1.98 +# if !defined(BOOST_NO_MEMBER_TEMPLATES) \
1.99 + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
1.100 +# define BOOST_MSVC6_MEMBER_TEMPLATES
1.101 +# endif
1.102 +
1.103 +//
1.104 +// Without partial specialization, can't test for partial specialisation bugs:
1.105 +//
1.106 +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
1.107 + && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
1.108 +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
1.109 +# endif
1.110 +
1.111 +//
1.112 +// Without partial specialization, we can't have array-type partial specialisations:
1.113 +//
1.114 +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
1.115 + && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
1.116 +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
1.117 +# endif
1.118 +
1.119 +//
1.120 +// Without partial specialization, std::iterator_traits can't work:
1.121 +//
1.122 +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
1.123 + && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
1.124 +# define BOOST_NO_STD_ITERATOR_TRAITS
1.125 +# endif
1.126 +
1.127 +//
1.128 +// Without member template support, we can't have template constructors
1.129 +// in the standard library either:
1.130 +//
1.131 +# if defined(BOOST_NO_MEMBER_TEMPLATES) \
1.132 + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
1.133 + && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
1.134 +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
1.135 +# endif
1.136 +
1.137 +//
1.138 +// Without member template support, we can't have a conforming
1.139 +// std::allocator template either:
1.140 +//
1.141 +# if defined(BOOST_NO_MEMBER_TEMPLATES) \
1.142 + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
1.143 + && !defined(BOOST_NO_STD_ALLOCATOR)
1.144 +# define BOOST_NO_STD_ALLOCATOR
1.145 +# endif
1.146 +
1.147 +//
1.148 +// without ADL support then using declarations will break ADL as well:
1.149 +//
1.150 +#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
1.151 +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
1.152 +#endif
1.153 +
1.154 +//
1.155 +// If we have a standard allocator, then we have a partial one as well:
1.156 +//
1.157 +#if !defined(BOOST_NO_STD_ALLOCATOR)
1.158 +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR
1.159 +#endif
1.160 +
1.161 +//
1.162 +// We can't have a working std::use_facet if there is no std::locale:
1.163 +//
1.164 +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
1.165 +# define BOOST_NO_STD_USE_FACET
1.166 +# endif
1.167 +
1.168 +//
1.169 +// We can't have a std::messages facet if there is no std::locale:
1.170 +//
1.171 +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
1.172 +# define BOOST_NO_STD_MESSAGES
1.173 +# endif
1.174 +
1.175 +//
1.176 +// We can't have a working std::wstreambuf if there is no std::locale:
1.177 +//
1.178 +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
1.179 +# define BOOST_NO_STD_WSTREAMBUF
1.180 +# endif
1.181 +
1.182 +//
1.183 +// We can't have a <cwctype> if there is no <cwchar>:
1.184 +//
1.185 +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
1.186 +# define BOOST_NO_CWCTYPE
1.187 +# endif
1.188 +
1.189 +//
1.190 +// We can't have a swprintf if there is no <cwchar>:
1.191 +//
1.192 +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
1.193 +# define BOOST_NO_SWPRINTF
1.194 +# endif
1.195 +
1.196 +//
1.197 +// If Win32 support is turned off, then we must turn off
1.198 +// threading support also, unless there is some other
1.199 +// thread API enabled:
1.200 +//
1.201 +#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
1.202 + && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
1.203 +# define BOOST_DISABLE_THREADS
1.204 +#endif
1.205 +
1.206 +//
1.207 +// Turn on threading support if the compiler thinks that it's in
1.208 +// multithreaded mode. We put this here because there are only a
1.209 +// limited number of macros that identify this (if there's any missing
1.210 +// from here then add to the appropriate compiler section):
1.211 +//
1.212 +#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
1.213 + || defined(_PTHREADS)) && !defined(BOOST_HAS_THREADS)
1.214 +# define BOOST_HAS_THREADS
1.215 +#endif
1.216 +
1.217 +//
1.218 +// Turn threading support off if BOOST_DISABLE_THREADS is defined:
1.219 +//
1.220 +#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
1.221 +# undef BOOST_HAS_THREADS
1.222 +#endif
1.223 +
1.224 +//
1.225 +// Turn threading support off if we don't recognise the threading API:
1.226 +//
1.227 +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
1.228 + && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
1.229 + && !defined(BOOST_HAS_MPTASKS)
1.230 +# undef BOOST_HAS_THREADS
1.231 +#endif
1.232 +
1.233 +//
1.234 +// Turn threading detail macros off if we don't (want to) use threading
1.235 +//
1.236 +#ifndef BOOST_HAS_THREADS
1.237 +# undef BOOST_HAS_PTHREADS
1.238 +# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
1.239 +# undef BOOST_HAS_WINTHREADS
1.240 +# undef BOOST_HAS_BETHREADS
1.241 +# undef BOOST_HAS_MPTASKS
1.242 +#endif
1.243 +
1.244 +//
1.245 +// If the compiler claims to be C99 conformant, then it had better
1.246 +// have a <stdint.h>:
1.247 +//
1.248 +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
1.249 +# define BOOST_HAS_STDINT_H
1.250 +# ifndef BOOST_HAS_LOG1P
1.251 +# define BOOST_HAS_LOG1P
1.252 +# endif
1.253 +# ifndef BOOST_HAS_EXPM1
1.254 +# define BOOST_HAS_EXPM1
1.255 +# endif
1.256 +# endif
1.257 +
1.258 +//
1.259 +// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
1.260 +// Note that this is for backwards compatibility only.
1.261 +//
1.262 +# ifndef BOOST_HAS_SLIST
1.263 +# define BOOST_NO_SLIST
1.264 +# endif
1.265 +
1.266 +# ifndef BOOST_HAS_HASH
1.267 +# define BOOST_NO_HASH
1.268 +# endif
1.269 +
1.270 +//
1.271 +// Set BOOST_SLIST_HEADER if not set already:
1.272 +//
1.273 +#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
1.274 +# define BOOST_SLIST_HEADER <slist>
1.275 +#endif
1.276 +
1.277 +//
1.278 +// Set BOOST_HASH_SET_HEADER if not set already:
1.279 +//
1.280 +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
1.281 +# define BOOST_HASH_SET_HEADER <hash_set>
1.282 +#endif
1.283 +
1.284 +//
1.285 +// Set BOOST_HASH_MAP_HEADER if not set already:
1.286 +//
1.287 +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
1.288 +# define BOOST_HASH_MAP_HEADER <hash_map>
1.289 +#endif
1.290 +
1.291 +// BOOST_HAS_ABI_HEADERS
1.292 +// This macro gets set if we have headers that fix the ABI,
1.293 +// and prevent ODR violations when linking to external libraries:
1.294 +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
1.295 +# define BOOST_HAS_ABI_HEADERS
1.296 +#endif
1.297 +
1.298 +#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
1.299 +# undef BOOST_HAS_ABI_HEADERS
1.300 +#endif
1.301 +
1.302 +// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------//
1.303 +// Because std::size_t usage is so common, even in boost headers which do not
1.304 +// otherwise use the C library, the <cstddef> workaround is included here so
1.305 +// that ugly workaround code need not appear in many other boost headers.
1.306 +// NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
1.307 +// must still be #included in the usual places so that <cstddef> inclusion
1.308 +// works as expected with standard conforming compilers. The resulting
1.309 +// double inclusion of <cstddef> is harmless.
1.310 +
1.311 +# ifdef BOOST_NO_STDC_NAMESPACE
1.312 +# include <cstddef>
1.313 + namespace std { using ::ptrdiff_t; using ::size_t; }
1.314 +# endif
1.315 +
1.316 +// Workaround for the unfortunate min/max macros defined by some platform headers
1.317 +
1.318 +#define BOOST_PREVENT_MACRO_SUBSTITUTION
1.319 +
1.320 +#ifndef BOOST_USING_STD_MIN
1.321 +# define BOOST_USING_STD_MIN() using std::min
1.322 +#endif
1.323 +
1.324 +#ifndef BOOST_USING_STD_MAX
1.325 +# define BOOST_USING_STD_MAX() using std::max
1.326 +#endif
1.327 +
1.328 +// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------//
1.329 +
1.330 +# ifdef BOOST_NO_STD_MIN_MAX
1.331 +
1.332 +namespace std {
1.333 + template <class _Tp>
1.334 + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
1.335 + return __b < __a ? __b : __a;
1.336 + }
1.337 + template <class _Tp>
1.338 + inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
1.339 + return __a < __b ? __b : __a;
1.340 + }
1.341 +}
1.342 +
1.343 +# endif
1.344 +
1.345 +// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
1.346 +// On compilers which don't allow in-class initialization of static integral
1.347 +// constant members, we must use enums as a workaround if we want the constants
1.348 +// to be available at compile-time. This macro gives us a convenient way to
1.349 +// declare such constants.
1.350 +
1.351 +# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
1.352 +# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
1.353 +# else
1.354 +# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
1.355 +# endif
1.356 +
1.357 +// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
1.358 +// When the standard library does not have a conforming std::use_facet there
1.359 +// are various workarounds available, but they differ from library to library.
1.360 +// The same problem occurs with has_facet.
1.361 +// These macros provide a consistent way to access a locale's facets.
1.362 +// Usage:
1.363 +// replace
1.364 +// std::use_facet<Type>(loc);
1.365 +// with
1.366 +// BOOST_USE_FACET(Type, loc);
1.367 +// Note do not add a std:: prefix to the front of BOOST_USE_FACET!
1.368 +// Use for BOOST_HAS_FACET is analagous.
1.369 +
1.370 +#if defined(BOOST_NO_STD_USE_FACET)
1.371 +# ifdef BOOST_HAS_TWO_ARG_USE_FACET
1.372 +# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
1.373 +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
1.374 +# elif defined(BOOST_HAS_MACRO_USE_FACET)
1.375 +# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
1.376 +# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
1.377 +# elif defined(BOOST_HAS_STLP_USE_FACET)
1.378 +# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
1.379 +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
1.380 +# endif
1.381 +#else
1.382 +# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
1.383 +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
1.384 +#endif
1.385 +
1.386 +// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
1.387 +// Member templates are supported by some compilers even though they can't use
1.388 +// the A::template member<U> syntax, as a workaround replace:
1.389 +//
1.390 +// typedef typename A::template rebind<U> binder;
1.391 +//
1.392 +// with:
1.393 +//
1.394 +// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
1.395 +
1.396 +#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
1.397 +# define BOOST_NESTED_TEMPLATE template
1.398 +#else
1.399 +# define BOOST_NESTED_TEMPLATE
1.400 +#endif
1.401 +
1.402 +// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
1.403 +// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
1.404 +// is defined, in which case it evaluates to return x; Use when you have a return
1.405 +// statement that can never be reached.
1.406 +
1.407 +#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
1.408 +# define BOOST_UNREACHABLE_RETURN(x) return x;
1.409 +#else
1.410 +# define BOOST_UNREACHABLE_RETURN(x)
1.411 +#endif
1.412 +
1.413 +// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
1.414 +//
1.415 +// Some compilers don't support the use of `typename' for dependent
1.416 +// types in deduced contexts, e.g.
1.417 +//
1.418 +// template <class T> void f(T, typename T::type);
1.419 +// ^^^^^^^^
1.420 +// Replace these declarations with:
1.421 +//
1.422 +// template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
1.423 +
1.424 +#ifndef BOOST_NO_DEDUCED_TYPENAME
1.425 +# define BOOST_DEDUCED_TYPENAME typename
1.426 +#else
1.427 +# define BOOST_DEDUCED_TYPENAME
1.428 +#endif
1.429 +
1.430 +// long long workaround ------------------------------------------//
1.431 +// On gcc (and maybe other compilers?) long long is alway supported
1.432 +// but it's use may generate either warnings (with -ansi), or errors
1.433 +// (with -pedantic -ansi) unless it's use is prefixed by __extension__
1.434 +//
1.435 +#if defined(BOOST_HAS_LONG_LONG)
1.436 +namespace boost{
1.437 +# ifdef __GNUC__
1.438 + __extension__ typedef long long long_long_type;
1.439 + __extension__ typedef unsigned long long ulong_long_type;
1.440 +# else
1.441 + typedef long long long_long_type;
1.442 + typedef unsigned long long ulong_long_type;
1.443 +# endif
1.444 +}
1.445 +#endif
1.446 +
1.447 +// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
1.448 +//
1.449 +// Some compilers have problems with function templates whose
1.450 +// template parameters don't appear in the function parameter
1.451 +// list (basically they just link one instantiation of the
1.452 +// template in the final executable). These macros provide a
1.453 +// uniform way to cope with the problem with no effects on the
1.454 +// calling syntax.
1.455 +
1.456 +// Example:
1.457 +//
1.458 +// #include <iostream>
1.459 +// #include <ostream>
1.460 +// #include <typeinfo>
1.461 +//
1.462 +// template <int n>
1.463 +// void f() { std::cout << n << ' '; }
1.464 +//
1.465 +// template <typename T>
1.466 +// void g() { std::cout << typeid(T).name() << ' '; }
1.467 +//
1.468 +// int main() {
1.469 +// f<1>();
1.470 +// f<2>();
1.471 +//
1.472 +// g<int>();
1.473 +// g<double>();
1.474 +// }
1.475 +//
1.476 +// With VC++ 6.0 the output is:
1.477 +//
1.478 +// 2 2 double double
1.479 +//
1.480 +// To fix it, write
1.481 +//
1.482 +// template <int n>
1.483 +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
1.484 +//
1.485 +// template <typename T>
1.486 +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }
1.487 +//
1.488 +
1.489 +
1.490 +#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
1.491 +
1.492 +# include "boost/type.hpp"
1.493 +# include "boost/non_type.hpp"
1.494 +
1.495 +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type<t>* = 0
1.496 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type<t>*
1.497 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type<t, v>* = 0
1.498 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type<t, v>*
1.499 +
1.500 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \
1.501 + , BOOST_EXPLICIT_TEMPLATE_TYPE(t)
1.502 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \
1.503 + , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
1.504 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \
1.505 + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
1.506 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \
1.507 + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
1.508 +
1.509 +#else
1.510 +
1.511 +// no workaround needed: expand to nothing
1.512 +
1.513 +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
1.514 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
1.515 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
1.516 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
1.517 +
1.518 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
1.519 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
1.520 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
1.521 +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
1.522 +
1.523 +
1.524 +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
1.525 +
1.526 +
1.527 +// ---------------------------------------------------------------------------//
1.528 +
1.529 +//
1.530 +// Helper macro BOOST_STRINGIZE:
1.531 +// Converts the parameter X to a string after macro replacement
1.532 +// on X has been performed.
1.533 +//
1.534 +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
1.535 +#define BOOST_DO_STRINGIZE(X) #X
1.536 +
1.537 +//
1.538 +// Helper macro BOOST_JOIN:
1.539 +// The following piece of macro magic joins the two
1.540 +// arguments together, even when one of the arguments is
1.541 +// itself a macro (see 16.3.1 in C++ standard). The key
1.542 +// is that macro expansion of macro arguments does not
1.543 +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
1.544 +//
1.545 +#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
1.546 +#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
1.547 +#define BOOST_DO_JOIN2( X, Y ) X##Y
1.548 +
1.549 +//
1.550 +// Set some default values for compiler/library/platform names.
1.551 +// These are for debugging config setup only:
1.552 +//
1.553 +# ifndef BOOST_COMPILER
1.554 +# define BOOST_COMPILER "Unknown ISO C++ Compiler"
1.555 +# endif
1.556 +# ifndef BOOST_STDLIB
1.557 +# define BOOST_STDLIB "Unknown ISO standard library"
1.558 +# endif
1.559 +# ifndef BOOST_PLATFORM
1.560 +# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
1.561 + || defined(_POSIX_SOURCE)
1.562 +# define BOOST_PLATFORM "Generic Unix"
1.563 +# else
1.564 +# define BOOST_PLATFORM "Unknown"
1.565 +# endif
1.566 +# endif
1.567 +
1.568 +#endif
1.569 +
1.570 +
1.571 +
1.572 +