I'm curious, wouldn't fusion's binary transform algorithm work for you? c = boost::fusion::transform(a, b, min());
Much simpler indeed! Thanks. Below is the full code. The part with struct result is a bit strange to me! I do not understand what Self(T, T) means. Frédéric #include <iostream> #include <string> #include <boost/fusion/include/for_each.hpp> #include <boost/fusion/include/transform.hpp> #include <boost/fusion/include/vector.hpp> #include <boost/type_traits/remove_reference.hpp> typedef boost::fusion::vector<double, int, std::string, char> Key; struct min { template <typename Sig> struct result; template <class Self, typename T> struct result< Self(T, T) > { typedef typename boost::remove_reference<T>::type type; }; template<typename T> T operator()(const T &lhs, const T &rhs) const { return std::min(lhs, rhs); } }; struct print { template <class T> void operator()(const T &rhs) const { std::cout<<rhs<<'\n'; } }; int main() { Key a(1., 0, "zz", 'a'); Key b(2., -1, "aa", 'a'); Key c; c=boost::fusion::transform(a, b, min()); boost::fusion::for_each(c, print()); return 0; }