You need to use fusion::result_of::as_map
.
using origin = boost::fusion::map<
boost::fusion::pair<int, int>
>;
using expected = boost::fusion::map<
boost::fusion::pair<int, int>
,boost::fusion::pair<char, char>
>;
using type = typename boost::fusion::result_of::as_map<
typename boost::fusion::result_of::push_back<
origin
,boost::fusion::pair<char, char>
>::type
>::type;