$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2002-09-19 16:50:56
Richard Crossley wrote:
> Personally I 'get around the problem' with an additional template:
> 
> template <typename T>
> struct eva; // evaluate arguments
> 
> template <template <typename> class F,typename A0>
> struct eva<F<A0> > : F<typename A0::type>
> {};
> template <template <typename,typename> class F,typename 
> A0,typename A1>
> struct eva<F<A0,A1> > : F<typename A0::type,typename A1::type>
> {};
> 
> etc... So,
> 
> apply_if<some_condition,some_type_1,plus<some_type_2::type,som
> e_number >
> >::type;
> 
> Becomes,
> 
> apply_if<some_condition,some_type_1,eva<plus<some_type_2,some_number>
> >::type;
> 
> Assuming some_number evaluates to its self, or if not,
> 
> apply_if<some_condition,some_type_1,eva<plus<some_type_2,ident
> ity<some_n
> umber> > >::type;
> 
That's close to what I've been thinking about:
    typedef apply_if<
          some_condition
        , some_type_1
        , lazy< plus< apply0<some_type_2>, some_number > >
        >::type f;
Basically, it's just another form of lambda.
Aleksey