A call wrapper may have a weak result type. If it does, the type of its member type result_type is based on the type T of the wrapper's target object:
if T is a pointer to function type, result_type shall be a synonym for the return type of T;
if T is a pointer to member function, result_type shall be a synonym for the return type of T;
if T is a class type and the qualified-id T::result_type is valid and denotes a type ([temp.deduct]), then result_type shall be a synonym for T::result_type;
otherwise result_type shall not be defined.