MyVector v = return_difference<MyVector>(p1, p2);

OK, what I had in mind was to allow for an interface where users don't have to specify the return type (the call would just be return_different(p1, p2) and the library would just determine if a vector or a point is expected). But I realize your proposal is more aligned with what we generally do right now in the library. I do have plans to make all return_xxx functions more convenient, not just that one, and what I was proposing better fits in those more general plans, so yes we can skip it for now.