You can replace the use of make_variant_over by transform_variant (which you included but finally didn't use). Basically just replace your "possible_result_types" with:

typedef typename transform_variant<
    possible_input_types,
    resolve_strategy::result_of blahblah (the same as you did)
>::type variant_over_possible_result_types;

and then

typedef typename compress_variant<
    variant_over_possible_result_types
>::type type;

I know it's not much different, but a tiny bit shorter and it reuses helper metafunctions.