MPL: Remove obsolete MSVC version checks.

[SVN r85956]
This commit is contained in:
Stephen Kelly
2013-09-26 13:05:50 +00:00
parent 50865751ae
commit 76dab04fa9
30 changed files with 22 additions and 533 deletions

View File

@@ -22,7 +22,6 @@
# include <boost/mpl/aux_/arity.hpp>
# include <boost/mpl/aux_/has_apply.hpp>
# include <boost/mpl/aux_/na.hpp>
# include <boost/mpl/aux_/msvc_never_true.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>

View File

@@ -19,9 +19,7 @@
#if !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
&& ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
|| BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
)
&& BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
# define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES

View File

@@ -20,9 +20,7 @@
#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
&& ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
)
&& BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
# define BOOST_MPL_CFG_NO_BIND_TEMPLATE

View File

@@ -21,7 +21,6 @@
#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY) \
&& ( defined(BOOST_MPL_CFG_NO_HAS_XXX) \
|| BOOST_WORKAROUND(__EDG_VERSION__, < 300) \
|| BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
)

View File

@@ -27,9 +27,7 @@
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
&& ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
)
&& BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
# define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC

View File

@@ -14,13 +14,7 @@
// $Date$
// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
# define BOOST_MSVC_TYPENAME
#else
# define BOOST_MSVC_TYPENAME typename
#endif
// Obsolete. Remove.
#define BOOST_MSVC_TYPENAME typename
#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED

View File

@@ -1,41 +0,0 @@
#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
#define BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2001-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
// MSVC 6.5 ICE-s on the code as simple as this (see "aux_/nttp_decl.hpp"
// for a workaround):
//
// namespace std {
// template< typename Char > struct string;
// }
//
// void foo(std::string<char>);
//
// namespace boost { namespace mpl {
// template< int > struct arg;
// }}
#if !defined(BOOST_MPL_CFG_NTTP_BUG) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE) \
&& BOOST_WORKAROUND(BOOST_MSVC, < 1300)
# define BOOST_MPL_CFG_NTTP_BUG
#endif
#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED

View File

@@ -19,8 +19,7 @@
#include <boost/mpl/aux_/config/workaround.hpp>
#if !defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING) \
&& ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
&& ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
|| BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \

View File

@@ -16,7 +16,7 @@
#if !defined(BOOST_MPL_AUX_PP_COUNTER)
# include <boost/mpl/aux_/config/msvc.hpp>
# if BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
# ifdef BOOST_MSVC
# define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__
# else
# define BOOST_MPL_AUX_PP_COUNTER() __LINE__

View File

@@ -20,11 +20,6 @@
#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
# include <boost/mpl/has_xxx.hpp>
#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
# include <boost/mpl/has_xxx.hpp>
# include <boost/mpl/if.hpp>
# include <boost/mpl/bool.hpp>
# include <boost/mpl/aux_/msvc_is_class.hpp>
#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
# include <boost/mpl/if.hpp>
# include <boost/mpl/bool.hpp>
@@ -43,20 +38,6 @@ namespace boost { namespace mpl { namespace aux {
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false)
#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false)
template< typename T >
struct has_rebind
: if_<
msvc_is_class<T>
, has_rebind_impl<T>
, bool_<false>
>::type
{
};
#else // the rest
template< typename T > struct has_rebind_tag {};

View File

@@ -122,7 +122,7 @@ template< BOOST_MPL_PP_PARAMS(i,typename T) > \
, name< BOOST_MPL_PP_ENUM(i,::boost::mpl::na) >* \
); \
/**/
#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
#else
# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
template< BOOST_MPL_PP_PARAMS(i,typename T) > \
::boost::mpl::aux::yes_tag operator|( \
@@ -130,8 +130,6 @@ template< BOOST_MPL_PP_PARAMS(i,typename T) > \
, ::boost::mpl::aux::has_rebind_tag< name<BOOST_MPL_PP_PARAMS(i,T)> >* \
); \
/**/
#else
# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/
#endif
# if !defined(__BORLANDC__)

View File

@@ -103,14 +103,6 @@ template<> struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
>::template result_< AUX778076_SHIFTED_PARAMS(T,1),BOOST_PP_CAT(AUX778076_OP_VALUE2,_) >
{
};
#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
template<> struct result_<AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))>
: BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
{
};
};
#else
};
template<>
@@ -119,7 +111,6 @@ struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
: BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
{
};
#endif // BOOST_MSVC == 1300
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

View File

@@ -1,68 +0,0 @@
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
#include <boost/mpl/aux_/preprocessor/params.hpp>
// local macros, #undef-ined at the end of the header
#define AUX778076_DTW_PARAMS(param) \
BOOST_MPL_PP_PARAMS(AUX778076_MSVC_DTW_ARITY, param) \
/**/
#define AUX778076_DTW_ORIGINAL_NAME \
AUX778076_MSVC_DTW_ORIGINAL_NAME \
/**/
// warning: not a well-formed C++
// workaround for MSVC 6.5's "dependent template typedef bug"
template< typename F>
struct AUX778076_MSVC_DTW_NAME
{
template< bool > struct f_ : F {};
template<> struct f_<true>
{
#if AUX778076_MSVC_DTW_ARITY > 0
template< AUX778076_DTW_PARAMS(typename P) > struct AUX778076_DTW_ORIGINAL_NAME
{
typedef int type;
};
};
template< AUX778076_DTW_PARAMS(typename T) > struct result_
: f_< aux::msvc_never_true<F>::value >
::template AUX778076_DTW_ORIGINAL_NAME< AUX778076_DTW_PARAMS(T) >
{
};
#else
template< typename P = int > struct AUX778076_DTW_ORIGINAL_NAME
{
typedef int type;
};
};
template< typename T = int > struct result_
: f_< aux::msvc_never_true<F>::value >
::template AUX778076_DTW_ORIGINAL_NAME<>
{
};
#endif
};
#undef AUX778076_DTW_ORIGINAL_NAME
#undef AUX778076_DTW_PARAMS
#undef AUX778076_MSVC_DTW_NAME
#undef AUX778076_MSVC_DTW_ORIGINAL_NAME
#undef AUX778076_MSVC_DTW_ARITY

View File

@@ -1,34 +0,0 @@
#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
namespace boost { namespace mpl { namespace aux {
template< typename T >
struct msvc_never_true
{
enum { value = false };
};
}}}
#endif // BOOST_MSVC
#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED

View File

@@ -25,36 +25,24 @@ template< typename T >
struct is_na
: false_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using false_::value;
#endif
};
template<>
struct is_na<na>
: true_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using true_::value;
#endif
};
template< typename T >
struct is_not_na
: true_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using true_::value;
#endif
};
template<>
struct is_not_na<na>
: false_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using false_::value;
#endif
};
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)

View File

@@ -16,20 +16,7 @@
#include <boost/mpl/aux_/config/nttp.hpp>
#if defined(BOOST_MPL_CFG_NTTP_BUG)
typedef bool _mpl_nttp_bool;
typedef int _mpl_nttp_int;
typedef unsigned _mpl_nttp_unsigned;
typedef long _mpl_nttp_long;
# include <boost/preprocessor/cat.hpp>
# define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/
#else
// Obsolete. Remove.
# define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/
#endif
#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED

View File

@@ -26,15 +26,7 @@ namespace boost { namespace mpl {
template< typename Tag >
struct pop_front_impl
{
template< typename Sequence > struct apply
// conservatively placed, but maybe should go outside surrounding
// braces.
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
{
typedef int type;
}
#endif
;
template< typename Sequence > struct apply;
};
BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_front_impl)

View File

@@ -65,12 +65,7 @@ template<> struct advance_impl<aux::r_iter_tag>
template< typename Iter, typename Dist > struct apply
{
typedef typename deref<Iter>::type n_;
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
typedef typename plus_impl<integral_c_tag,integral_c_tag>
::template apply<n_,Dist>::type m_;
#else
typedef typename plus<n_,Dist>::type m_;
#endif
// agurt, 10/nov/04: to be generic, the code have to do something along
// the lines below...
//

View File

@@ -38,12 +38,7 @@ template<> struct yes_no_tag<true>
template< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag
{
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
typedef char (&type)[n];
#else
char buf[n];
typedef weighted_tag type;
#endif
};
#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)

View File

@@ -34,18 +34,12 @@ template< typename T >
struct is_empty_base
: false_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using false_::value;
#endif
};
template<>
struct is_empty_base<empty_base>
: true_
{
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
using true_::value;
#endif
};
}}

View File

@@ -19,7 +19,6 @@
#include <boost/mpl/aux_/erase_impl.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/config/msvc_typename.hpp>
namespace boost { namespace mpl {

View File

@@ -19,7 +19,6 @@
#include <boost/mpl/aux_/erase_key_impl.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/config/msvc_typename.hpp>
namespace boost { namespace mpl {

View File

@@ -29,10 +29,8 @@ template<
, typename BOOST_MPL_AUX_NA_PARAM(F2)
>
struct eval_if
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
)
#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
{
typedef typename if_<C,F1,F2>::type f_;
typedef typename f_::type type;
@@ -51,10 +49,8 @@ template<
, typename F2
>
struct eval_if_c
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
)
#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
{
typedef typename if_c<C,F1,F2>::type f_;
typedef typename f_::type type;

View File

@@ -39,129 +39,16 @@
#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET
// newsgroup's posting by John Madsen (comp.lang.c++.moderated,
// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but
// it works way more reliably than the SFINAE-based implementation
// Modified dwa 8/Oct/02 to handle reference types.
# include <boost/mpl/if.hpp>
# include <boost/mpl/bool.hpp>
namespace boost { namespace mpl { namespace aux {
struct has_xxx_tag;
#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
template< typename U > struct msvc_incomplete_array
{
typedef char (&type)[sizeof(U) + 1];
};
#endif
template< typename T >
struct msvc_is_incomplete
{
// MSVC is capable of some kinds of SFINAE. If U is an incomplete
// type, it won't pick the second overload
static char tester(...);
#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
template< typename U >
static typename msvc_incomplete_array<U>::type tester(type_wrapper<U>);
#else
template< typename U >
static char (& tester(type_wrapper<U>) )[sizeof(U)+1];
#endif
BOOST_STATIC_CONSTANT(bool, value =
sizeof(tester(type_wrapper<T>())) == 1
);
};
template<>
struct msvc_is_incomplete<int>
{
BOOST_STATIC_CONSTANT(bool, value = false);
};
}}}
# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \
template< typename T, typename name = ::boost::mpl::aux::has_xxx_tag > \
struct BOOST_PP_CAT(trait,_impl) : T \
{ \
static boost::mpl::aux::no_tag \
test(void(*)(::boost::mpl::aux::has_xxx_tag)); \
\
static boost::mpl::aux::yes_tag test(...); \
\
BOOST_STATIC_CONSTANT(bool, value = \
sizeof(test(static_cast<void(*)(name)>(0))) \
!= sizeof(boost::mpl::aux::no_tag) \
); \
typedef boost::mpl::bool_<value> type; \
}; \
\
template< typename T, typename fallback_ = boost::mpl::bool_<default_> > \
struct trait \
: boost::mpl::if_c< \
boost::mpl::aux::msvc_is_incomplete<T>::value \
, boost::mpl::bool_<false> \
, BOOST_PP_CAT(trait,_impl)<T> \
>::type \
{ \
}; \
\
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \
/**/
# define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \
template<> struct trait<T> \
{ \
BOOST_STATIC_CONSTANT(bool, value = false); \
typedef boost::mpl::bool_<false> type; \
}; \
/**/
#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \
/**/
#else
# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
/**/
#endif
// SFINAE-based implementations below are derived from a USENET newsgroup's
// SFINAE-based implementations below are derived from a USENET newsgroup's
// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)
# elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
|| BOOST_WORKAROUND(__IBMCPP__, <= 700)
// MSVC 7.1+ & VACPP
// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE
// applied to partial specialization to fix some apparently random failures
// applied to partial specialization to fix some apparently random failures
// (thanks to Daniel Wallin for researching this!)
# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
@@ -256,7 +143,7 @@ struct trait \
}; \
/**/
# endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
# endif // BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
#else // BOOST_MPL_CFG_NO_HAS_XXX

View File

@@ -28,53 +28,12 @@
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
# include <boost/mpl/aux_/msvc_is_class.hpp>
#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
# include <boost/type_traits/is_class.hpp>
#endif
#include <boost/type_traits/is_same.hpp>
namespace boost { namespace mpl {
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
namespace aux {
// agurt, 11/jun/03:
// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a
// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'
// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds
// the issue for most real-world cases
template< typename T > struct is_sequence_impl
: and_<
identity< aux::has_tag<T> >
, identity< aux::has_begin<T> >
>
{
};
} // namespace aux
template<
typename BOOST_MPL_AUX_NA_PARAM(T)
>
struct is_sequence
: if_<
#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
aux::msvc_is_class<T>
#else
boost::is_class<T>
#endif
, aux::is_sequence_impl<T>
, bool_<false>
>::type
{
BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
};
#elif defined(BOOST_MPL_CFG_NO_HAS_XXX)
#if defined(BOOST_MPL_CFG_NO_HAS_XXX)
template<
typename BOOST_MPL_AUX_NA_PARAM(T)
@@ -95,7 +54,7 @@ struct is_sequence
BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
};
#endif // BOOST_MSVC
#endif // BOOST_MPL_CFG_NO_HAS_XXX
BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)

View File

@@ -28,10 +28,6 @@ template<
>
struct l_item
{
// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
typedef int begin;
#endif
typedef aux::list_tag tag;
typedef l_item type;
@@ -42,9 +38,6 @@ struct l_item
struct l_end
{
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
typedef int begin;
#endif
typedef aux::list_tag tag;
typedef l_end type;
typedef long_<0> size;

View File

@@ -22,27 +22,11 @@
namespace boost { namespace mpl {
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
namespace aux
{
template <class N>
struct is_even_base
{
enum { value = (N::value % 2) == 0 };
typedef bool_<value> type;
};
}
#endif
template<
typename BOOST_MPL_AUX_NA_PARAM(N)
>
struct is_even
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
: aux::is_even_base<N>::type
#else
: bool_<((N::value % 2) == 0)>
#endif
{
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_even,(N))
};

View File

@@ -23,47 +23,8 @@
#include <boost/mpl/aux_/config/workaround.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
# include <boost/mpl/if.hpp>
# include <boost/type_traits/is_reference.hpp>
#endif
namespace boost { namespace mpl {
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
namespace aux {
template< typename S, typename U >
struct multiset_count_impl
: int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >
{
};
template< typename S, typename U >
struct multiset_count_ref_impl
{
typedef U (* u_)();
typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;
BOOST_STATIC_CONSTANT(int, value = type_::value);
typedef type_ type;
};
}
template<>
struct count_impl< aux::multiset_tag >
{
template< typename Set, typename Key > struct apply
: if_<
is_reference<Key>
, aux::multiset_count_ref_impl<Set,Key>
, aux::multiset_count_impl<Set,Key>
>::type
{
};
};
#else
template<>
struct count_impl< aux::multiset_tag >
{
@@ -75,8 +36,6 @@ struct count_impl< aux::multiset_tag >
};
};
#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
}}
#endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED

View File

@@ -24,56 +24,8 @@
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
# include <boost/mpl/eval_if.hpp>
# include <boost/mpl/next.hpp>
# include <boost/type_traits/is_same.hpp>
#endif
namespace boost { namespace mpl {
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
template< typename T, typename Base >
struct ms_item
{
typedef aux::multiset_tag tag;
template< typename U > struct prior_count
{
enum { msvc70_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) };
typedef int_< msvc70_wknd_ > count_;
typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
#else
typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
#endif
};
template< typename U > struct prior_ref_count
{
typedef U (* u_)();
enum { msvc70_wknd_ = sizeof(Base::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) };
typedef int_< msvc70_wknd_ > count_;
typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
#else
typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
#endif
};
template< typename U >
static typename prior_count<U>::type key_count(U*);
template< typename U >
static typename prior_ref_count<U>::type ref_key_count(U (*)());
};
#else // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
namespace aux {
template< typename U, typename Base >
struct prior_key_count
@@ -107,8 +59,6 @@ struct ms_item
static typename aux::prior_key_count<U,Base>::type key_count(aux::type_wrapper<U>*);
};
#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
}}
#endif // BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED

View File

@@ -17,11 +17,11 @@
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
// agurt 21/sep/04: portability macro for the sake of MSVC 6.x-7.0;
// agurt 21/sep/04: portability macro for the sake of Borland;
// resolves conflicts with 'boost::numeric_cast' function template.
// use it in your own code _only_ if you care about compatibility with
// these outdated compilers!
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )
# define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast_
#else
# define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast