limited metafunction form support

[SVN r16632]
This commit is contained in:
Aleksey Gurtovoy
2002-12-17 10:42:05 +00:00
parent e313e912f4
commit 0d06b02ab6
28 changed files with 464 additions and 242 deletions

View File

@@ -25,7 +25,7 @@
# include "boost/mpl/lambda_fwd.hpp"
# include "boost/mpl/bind.hpp"
# include "boost/mpl/protect.hpp"
# include "boost/mpl/meta_fun.hpp"
# include "boost/mpl/quote.hpp"
# include "boost/mpl/bool_c.hpp"
# include "boost/mpl/aux_/template_arity.hpp"
# include "boost/mpl/aux_/config/ttp.hpp"
@@ -230,7 +230,7 @@ template<
struct BOOST_PP_CAT(le_result,i)< true,false,F,AUX_LAMBDA_PARAMS(i, L) >
{
typedef BOOST_PP_CAT(bind,i)<
BOOST_PP_CAT(meta_fun,i)<F>
BOOST_PP_CAT(quote,i)<F>
, BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_RESULT, L)
> type;
};
@@ -242,7 +242,7 @@ template<
struct BOOST_PP_CAT(le_result,i)< true,true,F,AUX_LAMBDA_PARAMS(i, L) >
{
typedef protect< BOOST_PP_CAT(bind,i)<
BOOST_PP_CAT(meta_fun,i)<F>
BOOST_PP_CAT(quote,i)<F>
, BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_RESULT, L)
> > type;
};
@@ -328,7 +328,7 @@ struct lambda_impl< F<AUX_LAMBDA_PARAMS(i, T)>, Protect AUX_LAMBDA_IMPL_ARITY >
/**/
typedef BOOST_PP_CAT(bind,i)<
BOOST_PP_CAT(meta_fun,i)<F>
BOOST_PP_CAT(quote,i)<F>
, BOOST_MPL_PP_REPEAT(i, AUX_LAMBDA_INVOCATION, T)
> type;

View File

@@ -1,9 +1,9 @@
//-----------------------------------------------------------------------------
// boost mpl/test/meta_fun.cpp source file
// boost mpl/aux_/has_type.hpp header file
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
// Copyright (c) 2000-02
// Copyright (c) 2002
// Aleksey Gurtovoy
//
// Permission to use, copy, modify, distribute and sell this software
@@ -14,18 +14,13 @@
// suitability of this software for any purpose. It is provided "as is"
// without express or implied warranty.
#include "boost/mpl/meta_fun.hpp"
#include "boost/mpl/assert_is_same.hpp"
#ifndef BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
#define BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
namespace mpl = boost::mpl;
#include "boost/mpl/aux_/has_xxx.hpp"
template<typename> struct f1;
template<typename T1, typename T2, typename T3, typename T4, typename T5> struct f5;
namespace boost { namespace mpl { namespace aux {
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true)
}}}
int main()
{
typedef mpl::meta_fun1<f1> fc1;
typedef mpl::meta_fun5<f5> fc5;
return 0;
}
#endif // BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -202,7 +202,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -214,7 +214,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -321,7 +321,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -333,7 +333,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -443,7 +443,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -456,7 +456,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -575,7 +575,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -592,7 +592,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,3 +0,0 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// see the original for copyright information

View File

@@ -0,0 +1,3 @@
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -202,7 +202,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -214,7 +214,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -321,7 +321,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -333,7 +333,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -443,7 +443,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -456,7 +456,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -575,7 +575,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -592,7 +592,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,3 +0,0 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// see the original for copyright information

View File

@@ -0,0 +1,3 @@
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -202,7 +202,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -214,7 +214,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -321,7 +321,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -333,7 +333,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -443,7 +443,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -456,7 +456,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -575,7 +575,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -592,7 +592,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,16 +1,31 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template< typename T, bool has_type_ = aux::has_type<T>::value >
struct quote_impl
: T
{
};
template< typename T >
struct quote_impl< T,false >
{
typedef T type;
};
template<
template< typename P1 > class F
>
struct meta_fun1
struct quote1
{
template< typename U1 > struct apply
: F<U1>
: quote_impl< F<U1> >
{
};
};
@@ -18,10 +33,12 @@ struct meta_fun1
template<
template< typename P1, typename P2 > class F
>
struct meta_fun2
struct quote2
{
template< typename U1, typename U2 > struct apply
: F< U1,U2 >
: quote_impl< F<U1,U2> >
{
};
};
@@ -29,10 +46,12 @@ struct meta_fun2
template<
template< typename P1, typename P2, typename P3 > class F
>
struct meta_fun3
struct quote3
{
template< typename U1, typename U2, typename U3 > struct apply
: F< U1,U2,U3 >
: quote_impl< F<U1,U2,U3> >
{
};
};
@@ -40,13 +59,15 @@ struct meta_fun3
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct meta_fun4
struct quote4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: F< U1,U2,U3,U4 >
: quote_impl< F<U1,U2,U3,U4> >
{
};
};
@@ -58,14 +79,16 @@ template<
>
class F
>
struct meta_fun5
struct quote5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: F< U1,U2,U3,U4,U5 >
: quote_impl< F<U1,U2,U3,U4,U5> >
{
};
};

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -173,7 +173,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -185,7 +185,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -261,7 +261,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -273,7 +273,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -351,7 +351,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -364,7 +364,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -449,7 +449,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -466,7 +466,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,3 +0,0 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// see the original for copyright information

View File

@@ -0,0 +1,3 @@
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -173,7 +173,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -185,7 +185,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -261,7 +261,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -273,7 +273,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -351,7 +351,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -364,7 +364,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -449,7 +449,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -466,7 +466,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,16 +1,35 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template< bool > struct quote_impl
{
template< typename T > struct result_
: T
{
};
};
template<> struct quote_impl<false>
{
template< typename T > struct result_
{
typedef T type;
};
};
template<
template< typename P1 > class F
>
struct meta_fun1
struct quote1
{
template< typename U1 > struct apply
: F<U1>
: quote_impl< aux::has_type< F<U1> >::value >
::template result_< F<U1> >
{
};
};
@@ -18,10 +37,13 @@ struct meta_fun1
template<
template< typename P1, typename P2 > class F
>
struct meta_fun2
struct quote2
{
template< typename U1, typename U2 > struct apply
: F< U1,U2 >
: quote_impl< aux::has_type< F<U1,U2> >::value >
::template result_< F<U1,U2> >
{
};
};
@@ -29,10 +51,13 @@ struct meta_fun2
template<
template< typename P1, typename P2, typename P3 > class F
>
struct meta_fun3
struct quote3
{
template< typename U1, typename U2, typename U3 > struct apply
: F< U1,U2,U3 >
: quote_impl< aux::has_type< F<U1,U2,U3> >::value >
::template result_< F<U1,U2,U3> >
{
};
};
@@ -40,13 +65,16 @@ struct meta_fun3
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct meta_fun4
struct quote4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: F< U1,U2,U3,U4 >
: quote_impl< aux::has_type< F<U1,U2,U3,U4> >::value >
::template result_< F<U1,U2,U3,U4> >
{
};
};
@@ -58,14 +86,17 @@ template<
>
class F
>
struct meta_fun5
struct quote5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: F< U1,U2,U3,U4,U5 >
: quote_impl< aux::has_type< F<U1,U2,U3,U4,U5> >::value >
::template result_< F<U1,U2,U3,U4,U5> >
{
};
};

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -173,7 +173,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -185,7 +185,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -261,7 +261,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -273,7 +273,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -351,7 +351,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -364,7 +364,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -449,7 +449,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -466,7 +466,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,16 +1,31 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template< typename T, bool has_type_ = aux::has_type<T>::value >
struct quote_impl
: T
{
};
template< typename T >
struct quote_impl< T,false >
{
typedef T type;
};
template<
template< typename P1 > class F
>
struct meta_fun1
struct quote1
{
template< typename U1 > struct apply
: F<U1>
: quote_impl< F<U1> >
{
};
};
@@ -18,10 +33,12 @@ struct meta_fun1
template<
template< typename P1, typename P2 > class F
>
struct meta_fun2
struct quote2
{
template< typename U1, typename U2 > struct apply
: F< U1,U2 >
: quote_impl< F<U1,U2> >
{
};
};
@@ -29,10 +46,12 @@ struct meta_fun2
template<
template< typename P1, typename P2, typename P3 > class F
>
struct meta_fun3
struct quote3
{
template< typename U1, typename U2, typename U3 > struct apply
: F< U1,U2,U3 >
: quote_impl< F<U1,U2,U3> >
{
};
};
@@ -40,13 +59,15 @@ struct meta_fun3
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct meta_fun4
struct quote4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: F< U1,U2,U3,U4 >
: quote_impl< F<U1,U2,U3,U4> >
{
};
};
@@ -58,14 +79,16 @@ template<
>
class F
>
struct meta_fun5
struct quote5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: F< U1,U2,U3,U4,U5 >
: quote_impl< F<U1,U2,U3,U4,U5> >
{
};
};

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -173,7 +173,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -185,7 +185,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -261,7 +261,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -273,7 +273,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -351,7 +351,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -364,7 +364,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -449,7 +449,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -466,7 +466,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -0,0 +1,106 @@
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template< bool > struct quote_impl
{
template< typename T > struct result_
: T
{
};
};
template<> struct quote_impl<false>
{
template< typename T > struct result_
{
typedef T type;
};
};
template<
template< typename P1 > class F
>
struct quote1
{
template< typename U1 > struct apply
: quote_impl< aux::has_type< F<U1> >::value >
::template result_< F<U1> >
{
};
};
template<
template< typename P1, typename P2 > class F
>
struct quote2
{
template< typename U1, typename U2 > struct apply
: quote_impl< aux::has_type< F<U1,U2> >::value >
::template result_< F<U1,U2> >
{
};
};
template<
template< typename P1, typename P2, typename P3 > class F
>
struct quote3
{
template< typename U1, typename U2, typename U3 > struct apply
: quote_impl< aux::has_type< F<U1,U2,U3> >::value >
::template result_< F<U1,U2,U3> >
{
};
};
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct quote4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: quote_impl< aux::has_type< F<U1,U2,U3,U4> >::value >
::template result_< F<U1,U2,U3,U4> >
{
};
};
template<
template<
typename P1, typename P2, typename P3, typename P4
, typename P5
>
class F
>
struct quote5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: quote_impl< aux::has_type< F<U1,U2,U3,U4,U5> >::value >
::template result_< F<U1,U2,U3,U4,U5> >
{
};
};
} // namespace mpl
} // namespace boost

View File

@@ -87,7 +87,7 @@ template<
struct le_result1< true,false,F,L1 >
{
typedef bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> type;
};
@@ -99,7 +99,7 @@ template<
struct le_result1< true,true,F,L1 >
{
typedef protect< bind1<
meta_fun1<F>
quote1<F>
, typename L1::type
> > type;
};
@@ -173,7 +173,7 @@ template<
struct le_result2< true,false,F,L1,L2 >
{
typedef bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> type;
};
@@ -185,7 +185,7 @@ template<
struct le_result2< true,true,F,L1,L2 >
{
typedef protect< bind2<
meta_fun2<F>
quote2<F>
, typename L1::type, typename L2::type
> > type;
};
@@ -261,7 +261,7 @@ template<
struct le_result3< true,false,F,L1,L2,L3 >
{
typedef bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> type;
};
@@ -273,7 +273,7 @@ template<
struct le_result3< true,true,F,L1,L2,L3 >
{
typedef protect< bind3<
meta_fun3<F>
quote3<F>
, typename L1::type, typename L2::type, typename L3::type
> > type;
};
@@ -351,7 +351,7 @@ template<
struct le_result4< true,false,F,L1,L2,L3,L4 >
{
typedef bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> type;
@@ -364,7 +364,7 @@ template<
struct le_result4< true,true,F,L1,L2,L3,L4 >
{
typedef protect< bind4<
meta_fun4<F>
quote4<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type
> > type;
@@ -449,7 +449,7 @@ template<
struct le_result5< true,false,F,L1,L2,L3,L4,L5 >
{
typedef bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> type;
@@ -466,7 +466,7 @@ template<
struct le_result5< true,true,F,L1,L2,L3,L4,L5 >
{
typedef protect< bind5<
meta_fun5<F>
quote5<F>
, typename L1::type, typename L2::type, typename L3::type
, typename L4::type, typename L5::type
> > type;

View File

@@ -1,75 +0,0 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template<
template< typename P1 > class F
>
struct meta_fun1
{
template< typename U1 > struct apply
: F<U1>
{
};
};
template<
template< typename P1, typename P2 > class F
>
struct meta_fun2
{
template< typename U1, typename U2 > struct apply
: F< U1,U2 >
{
};
};
template<
template< typename P1, typename P2, typename P3 > class F
>
struct meta_fun3
{
template< typename U1, typename U2, typename U3 > struct apply
: F< U1,U2,U3 >
{
};
};
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct meta_fun4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: F< U1,U2,U3,U4 >
{
};
};
template<
template<
typename P1, typename P2, typename P3, typename P4
, typename P5
>
class F
>
struct meta_fun5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: F< U1,U2,U3,U4,U5 >
{
};
};
} // namespace mpl
} // namespace boost

View File

@@ -1,16 +1,31 @@
// preprocessed version of 'boost/mpl/meta_fun.hpp' header
// preprocessed version of 'boost/mpl/quote.hpp' header
// see the original for copyright information
namespace boost {
namespace mpl {
template< typename T, bool has_type_ = aux::has_type<T>::value >
struct quote_impl
: T
{
};
template< typename T >
struct quote_impl< T,false >
{
typedef T type;
};
template<
template< typename P1 > class F
>
struct meta_fun1
struct quote1
{
template< typename U1 > struct apply
: F<U1>
: quote_impl< F<U1> >
{
};
};
@@ -18,10 +33,12 @@ struct meta_fun1
template<
template< typename P1, typename P2 > class F
>
struct meta_fun2
struct quote2
{
template< typename U1, typename U2 > struct apply
: F< U1,U2 >
: quote_impl< F<U1,U2> >
{
};
};
@@ -29,10 +46,12 @@ struct meta_fun2
template<
template< typename P1, typename P2, typename P3 > class F
>
struct meta_fun3
struct quote3
{
template< typename U1, typename U2, typename U3 > struct apply
: F< U1,U2,U3 >
: quote_impl< F<U1,U2,U3> >
{
};
};
@@ -40,13 +59,15 @@ struct meta_fun3
template<
template< typename P1, typename P2, typename P3, typename P4 > class F
>
struct meta_fun4
struct quote4
{
template<
typename U1, typename U2, typename U3, typename U4
>
struct apply
: F< U1,U2,U3,U4 >
: quote_impl< F<U1,U2,U3,U4> >
{
};
};
@@ -58,14 +79,16 @@ template<
>
class F
>
struct meta_fun5
struct quote5
{
template<
typename U1, typename U2, typename U3, typename U4
, typename U5
>
struct apply
: F< U1,U2,U3,U4,U5 >
: quote_impl< F<U1,U2,U3,U4,U5> >
{
};
};

View File

@@ -1,5 +1,5 @@
//-----------------------------------------------------------------------------
// boost mpl/meta_fun.hpp header file
// boost mpl/quote.hpp header file
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
@@ -18,15 +18,19 @@
///// header body
#ifndef BOOST_MPL_META_FUN_HPP_INCLUDED
#define BOOST_MPL_META_FUN_HPP_INCLUDED
#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED
#define BOOST_MPL_QUOTE_HPP_INCLUDED
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include "boost/mpl/aux_/has_type.hpp"
#endif
#include "boost/mpl/aux_/config/use_preprocessed.hpp"
#if defined(BOOST_MPL_USE_PREPROCESSED_HEADERS) && \
!defined(BOOST_MPL_PREPROCESSING_MODE)
#if defined(BOOST_MPL_USE_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER meta_fun.hpp
# define BOOST_MPL_PREPROCESSED_HEADER quote.hpp
# include "boost/mpl/aux_/include_preprocessed.hpp"
#else
@@ -34,6 +38,7 @@
# include "boost/mpl/limits/arity.hpp"
# include "boost/mpl/aux_/preprocessor/params.hpp"
# include "boost/mpl/aux_/config/ttp.hpp"
# include "boost/mpl/aux_/config/ctps.hpp"
# include "boost/preprocessor/iterate.hpp"
# include "boost/preprocessor/cat.hpp"
@@ -43,8 +48,47 @@
namespace boost {
namespace mpl {
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template< typename T, bool has_type_ = aux::has_type<T>::value >
struct quote_impl
#if !defined(__BORLANDC__) && (__BORLANDC__ <= 0x561 || !defined(BOOST_STRICT_CONFIG))
: T
{
#else
{
typedef typename T::type type;
#endif
};
template< typename T >
struct quote_impl<T,false>
{
typedef T type;
};
#else
template< bool > struct quote_impl
{
template< typename T > struct result_
: T
{
};
};
template<> struct quote_impl<false>
{
template< typename T > struct result_
{
typedef T type;
};
};
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#define BOOST_PP_ITERATION_PARAMS_1 \
(3,(1, BOOST_MPL_METAFUNCTION_MAX_ARITY, "boost/mpl/meta_fun.hpp"))
(3,(1, BOOST_MPL_METAFUNCTION_MAX_ARITY, "boost/mpl/quote.hpp"))
#include BOOST_PP_ITERATE()
} // namespace mpl
@@ -53,7 +97,7 @@ namespace mpl {
#endif // BOOST_NO_TEMPLATE_TEMPLATE_PARAMETERS
#endif // BOOST_MPL_USE_PREPROCESSED_HEADERS
#endif // BOOST_MPL_META_FUN_HPP_INCLUDED
#endif // BOOST_MPL_QUOTE_HPP_INCLUDED
///// iteration
@@ -63,10 +107,15 @@ namespace mpl {
template<
template< BOOST_MPL_PP_PARAMS(i, typename P) > class F
>
struct BOOST_PP_CAT(meta_fun,i)
struct BOOST_PP_CAT(quote,i)
{
template< BOOST_MPL_PP_PARAMS(i, typename U) > struct apply
: F< BOOST_MPL_PP_PARAMS(i, U) >
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
: quote_impl< F< BOOST_MPL_PP_PARAMS(i, U) > >
#else
: quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i, U) > >::value >
::template result_< F< BOOST_MPL_PP_PARAMS(i, U) > >
#endif
{
};
};

View File

@@ -17,14 +17,14 @@
#ifndef BOOST_MPL_V2_1_TYPE_TRAITS_HPP_INCLUDED
#define BOOST_MPL_V2_1_TYPE_TRAITS_HPP_INCLUDED
#include "boost/mpl/meta_fun.hpp"
#include "boost/mpl/quote.hpp"
#include "boost/type_traits/is_same.hpp"
#include "boost/type_traits/is_float.hpp"
namespace boost { namespace mpl { namespace v2_1 {
struct is_float : mpl::meta_fun1<boost::is_float> {};
struct is_same : mpl::meta_fun2<boost::is_same> {};
struct is_float : mpl::quote1<boost::is_float> {};
struct is_same : mpl::quote2<boost::is_same> {};
}}} // namespace boost::mpl::v2_1

View File

@@ -1,2 +1,2 @@
#define BOOST_MPL_PREPROCESSING_MODE
#include "boost/mpl/meta_fun.hpp"
#include "boost/mpl/quote.hpp"

View File

@@ -31,6 +31,7 @@ compile erase_range.cpp ;
compile filter_view.cpp ;
compile find.cpp ;
compile find_if.cpp ;
compile fold.cpp ;
unit-test for_each : for_each.cpp : <sysinclude>$(BOOST_ROOT) ;
compile front.cpp ;
compile identity.cpp ;
@@ -48,10 +49,10 @@ compile list.cpp ;
compile list_c.cpp ;
compile logical.cpp ;
compile lower_bound.cpp ;
compile meta_fun.cpp ;
compile next.cpp ;
compile pop_front.cpp ;
compile push_front.cpp ;
compile quote.cpp ;
compile range_c.cpp ;
compile replace.cpp ;
compile replace_if.cpp ;

View File

@@ -33,7 +33,7 @@ int main()
BOOST_STATIC_ASSERT((mpl::count_if< types, boost::is_float<_> >::type::value == 1));
BOOST_STATIC_ASSERT((mpl::count_if< types, boost::is_same<_,char&> >::type::value == 2));
BOOST_STATIC_ASSERT((mpl::count_if< types, boost::is_same<_,void> >::type::value == 0));
BOOST_STATIC_ASSERT((mpl::count_if< types, boost::is_same<_,void*> >::type::value == 0));
BOOST_STATIC_ASSERT((mpl::count_if< values, mpl::lt<5> >::type::value == 4));
BOOST_STATIC_ASSERT((mpl::count_if< values, mpl::eq<0> >::type::value == 2));

46
test/quote.cpp Normal file
View File

@@ -0,0 +1,46 @@
//-----------------------------------------------------------------------------
// boost mpl/test/quote.cpp source file
// See http://www.boost.org for updates, documentation, and revision history.
//-----------------------------------------------------------------------------
//
// Copyright (c) 2000-02
// Aleksey Gurtovoy
//
// Permission to use, copy, modify, distribute and sell this software
// and its documentation for any purpose is hereby granted without fee,
// provided that the above copyright notice appears in all copies and
// that both the copyright notice and this permission notice appear in
// supporting documentation. No representations are made about the
// suitability of this software for any purpose. It is provided "as is"
// without express or implied warranty.
#include "boost/mpl/quote.hpp"
#include "boost/mpl/apply.hpp"
#include "boost/type_traits/is_same.hpp"
#include "boost/static_assert.hpp"
using namespace boost::mpl;
template< typename T > struct f1
{
typedef T type;
};
template<
typename T1, typename T2, typename T3, typename T4, typename T5
>
struct f5
{
// no 'type' member!
};
int main()
{
typedef apply1< quote1<f1>,int >::type t1;
typedef apply5< quote5<f5>,char,short,int,long,float >::type t5;
BOOST_STATIC_ASSERT((boost::is_same< t1, int >::value));
BOOST_STATIC_ASSERT((boost::is_same< t5, f5<char,short,int,long,float> >::value));
return 0;
}