Hi, I need to be explicit about a function call, but unsure quite how to make it work, cut down example follows: struct M { static void foo() { ... } }; struct R { static void foo() { ... } }; struct Func { typedef void result_type; template <typename T, typename U> result_type operator()(U& u) const { T::foo(); // call on either M or R // do something with 'u' } }; int main(int argc, char** argv) { using namespace boost::mpl; typedef vector<M, R> vec; Func f; Object instance; for_each<vec>(boost::bind(&Func::operator()<XXX, Object>, boost::ref(f), instance) ); return 0; } Question is, what goes in at XXX above? I was thinking something along the lines of: boost::mpl::bind<boost::mpl::_1> ..but well, that doesn't work. All help appreciated. Cheers, -- Manfred