I then tried this
struct F_impl{ typedef result_of::make_map< p , q , double, double >::type mapped_arguments; template<class Args> struct result{ typedef double type; }; double operator()(mapped_arguments const& args) const{ return at_key<p>(args) + at_key<q>(args); }
};
struct F : F_impl, unfused
{ F() : unfused ((F_impl const&)*this){} F(F_impl const& f) : F_impl(f), unfused ((F_impl const&)*this){} template<class Args> struct result{ typedef typename F_impl::result<Args>::type type; }; using F_impl::operator(); };
which seems to work but looks and feels awkward.
Sorry, take that back this second option doesn't work either. (So, I don't have a single solution for this). Thank you, Alfredo