27 #ifndef MLN_CORE_CONCEPT_META_ACCUMULATOR_HH
28 # define MLN_CORE_CONCEPT_META_ACCUMULATOR_HH
34 # include <mln/core/concept/object.hh>
35 # include <mln/core/concept/accumulator.hh>
38 # define mln_accu_with(A, T) \
39 typename mln::internal::accu_with_helper<A,T>::ret
41 # define mln_accu_with_(A, T) \
42 mln::internal::accu_with_helper<A,T>::ret
45 # define mln_meta_accu_result(A, T) \
46 typename mln::internal::meta_accu_ret_result_helper<A,T>::result
49 # define mln_meta_accu_result_(A, T) \
50 mln::internal::meta_accu_ret_result_helper<A,T>::result
59 template <
typename E>
struct Meta_Accumulator;
68 template <
typename A,
typename T>
69 struct meta_accu_ret_result_helper
71 typedef typename A::template with< T >::ret::result result;
78 template <
typename A,
typename T>
79 struct accu_with_helper
81 typedef typename A::template with< T >::ret ret;
90 struct Meta_Accumulator<void>
92 typedef Object<void> super;
102 template <
typename E>
117 template <
typename M,
typename T>
121 template <typename M, typename T>
129 # ifndef MLN_INCLUDE_ONLY
131 template <
typename E>
141 template <
typename M,
typename T>
146 mlc_is_a(M, Meta_Accumulator)::check();
147 mln_accu_with(M, T) a;
153 # endif // ! MLN_INCLUDE_ONLY
158 #endif // ! MLN_CORE_CONCEPT_META_ACCUMULATOR_HH