Function declaration:
template
Point* operator +(Point const * const point, Vector const * const vector);
What you're doing wrong here on the language level is overloading operators for pointers. At least one argument of an overloaded operator must be of a user-defined type, or a reference to one.
But you're also doing this wrong on another level. You're returning a pointer, which means you will probably need to allocate some storage dynamically in the operator. Well, who owns that storage? Who will release it?
You should just take references and return by value, something like:
template
Point operator +(Point const& point, Vector const& vector) {
return Point(point.x + vector.x, point.y + vector.y);
}