Check if a type is compatible in a certain context, with a certain instance. Very general use. Returns true by default, so specialize this to specifically disallow/test certain combinations rather than enable them.