mirror of
https://github.com/boostorg/mpl.git
synced 2025-08-02 22:34:31 +02:00
ICE cast fixes
[SVN r17209]
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
// See http://www.boost.org for updates, documentation, and revision history.
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2001-02
|
||||
// Copyright (c) 2001-03
|
||||
// Aleksey Gurtovoy
|
||||
//
|
||||
// Permission to use, copy, modify, distribute and sell this software
|
||||
@@ -17,12 +17,12 @@
|
||||
#ifndef BOOST_MPL_AUX_ICE_CAST_HPP_INCLUDED
|
||||
#define BOOST_MPL_AUX_ICE_CAST_HPP_INCLUDED
|
||||
|
||||
#include "boost/config.hpp"
|
||||
#include "boost/mpl/aux_/config/workaround.hpp"
|
||||
|
||||
#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x561 || !defined(BOOST_STRICT_CONFIG)) \
|
||||
|| defined(__GNUC__) && __GNUC__ < 3
|
||||
# define BOOST_MPL_AUX_ICE_CAST(T, expr) expr
|
||||
#elif defined(__MWERKS__) && __MWERKS__ <= 0x3001
|
||||
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
|
||||
|| BOOST_WORKAROUND(__GNUC__, < 3)
|
||||
# define BOOST_MPL_AUX_ICE_CAST(T, expr) T(expr)
|
||||
#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3001)
|
||||
# define BOOST_MPL_AUX_ICE_CAST(T, expr) (T)(expr)
|
||||
#else
|
||||
# define BOOST_MPL_AUX_ICE_CAST(T, expr) static_cast<T>(expr)
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include "boost/mpl/aux_/ice_cast.hpp"
|
||||
#include "boost/mpl/aux_/void_spec.hpp"
|
||||
#include "boost/mpl/aux_/lambda_support.hpp"
|
||||
#include "boost/mpl/aux_/config/workaround.hpp"
|
||||
#include "boost/config.hpp"
|
||||
|
||||
namespace boost {
|
||||
@@ -56,7 +57,11 @@ struct if_
|
||||
private:
|
||||
// agurt, 02/jan/03: two-step 'type' definition for the sake of aCC
|
||||
typedef if_c<
|
||||
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561))
|
||||
BOOST_MPL_AUX_VALUE_WKND(C)::value
|
||||
#else
|
||||
BOOST_MPL_AUX_ICE_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(C)::value)
|
||||
#endif
|
||||
, T1
|
||||
, T2
|
||||
> almost_type_;
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
|
||||
#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
|
||||
|
||||
#include "boost/mpl/aux_/ice_cast.hpp"
|
||||
#include "boost/mpl/aux_/config/static_constant.hpp"
|
||||
#include "boost/mpl/aux_/config/workaround.hpp"
|
||||
|
||||
@@ -45,23 +46,19 @@ struct integral_c
|
||||
// either
|
||||
#if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 243
|
||||
private:
|
||||
BOOST_STATIC_CONSTANT(T, next_value = static_cast<T>(N + 1));
|
||||
BOOST_STATIC_CONSTANT(T, prior_value = static_cast<T>(N - 1));
|
||||
BOOST_STATIC_CONSTANT(T, next_value = BOOST_MPL_AUX_ICE_CAST(T, (N + 1)));
|
||||
BOOST_STATIC_CONSTANT(T, prior_value = BOOST_MPL_AUX_ICE_CAST(T, (N - 1)));
|
||||
public:
|
||||
typedef integral_c<T, next_value> next;
|
||||
typedef integral_c<T, prior_value> prior;
|
||||
#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
|
||||
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \
|
||||
|| BOOST_WORKAROUND(__HP_aCC, BOOST_TESTED_AT(53800))
|
||||
// Borland can't handle the casts, and HP doesn't need them
|
||||
// because the 2nd template parameter is not T but long
|
||||
typedef integral_c<T, N + 1> next;
|
||||
typedef integral_c<T, N - 1> prior;
|
||||
#elif BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502))
|
||||
typedef integral_c<T, static_cast<T>(N + 1)> next;
|
||||
typedef integral_c<T, static_cast<T>(N - 1)> prior;
|
||||
typedef integral_c<T, BOOST_MPL_AUX_ICE_CAST(T, (N + 1))> next;
|
||||
typedef integral_c<T, BOOST_MPL_AUX_ICE_CAST(T, (N - 1))> prior;
|
||||
#else
|
||||
typedef integral_c<T, static_cast<T>(value + 1)> next;
|
||||
typedef integral_c<T, static_cast<T>(value - 1)> prior;
|
||||
typedef integral_c<T, BOOST_MPL_AUX_ICE_CAST(T, (value + 1))> next;
|
||||
typedef integral_c<T, BOOST_MPL_AUX_ICE_CAST(T, (value - 1))> prior;
|
||||
#endif
|
||||
|
||||
// enables uniform function call syntax for families of overloaded
|
||||
|
Reference in New Issue
Block a user