Make detail::functor1 capable to return a different argument value_type than the argument value_type
Replace function instanciations with macros by templates