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