00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 #ifndef MLN_TRAIT_CH_FUNCTION_VALUE_HH
00027 # define MLN_TRAIT_CH_FUNCTION_VALUE_HH
00028 
00032 
00033 # define mln_ch_function_value(I, V) \
00034 typename mln::trait::ch_function_value< I, V >::ret
00035 
00036 # define mln_ch_function_value_(I, V) \
00037 mln::trait::ch_functionvalue< I, V >::ret
00038 
00039 # include <mln/fun/v2v/ch_function_value.hh>
00040 
00041 namespace mln
00042 {
00043 
00044   
00045   namespace trait { template <typename F, typename V> struct ch_function_value; }
00046   namespace fun { namespace i2v { template <typename T> class array; } }
00047 
00048 
00049   namespace trait
00050   {
00051 
00052     namespace impl
00053     {
00054 
00056       template <typename F, typename VF, typename V>
00057       struct ch_function_value
00058       {
00059         typedef fun::v2v::ch_function_value<F, V> ret;
00060       };
00061 
00062       template <typename VF, typename V>
00063       struct ch_function_value<fun::i2v::array<VF>, VF, V>
00064       {
00065         typedef fun::i2v::array<V> ret;
00066       };
00067 
00068     } 
00069 
00070 
00071     template <typename F, typename V>
00072     struct ch_function_value
00073     {
00074       typedef typename impl::ch_function_value<F, mln_result(F), V>::ret ret;
00075     };
00076 
00077 
00078   } 
00079 
00080 } 
00081 
00082 #endif // ! MLN_TRAIT_CH_FUNCTION_VALUE_HH