Improved make_visitor