Что вы делаете неправильно на уровне языка, так это перегрузка операторов для указателей.По крайней мере, один аргумент перегруженного оператора должен иметь пользовательский тип или ссылку на него.
Но вы также делаете это неправильно на другом уровне.Вы возвращаете указатель, что означает, что вам, вероятно, потребуется динамически выделять некоторое хранилище в операторе.Ну, кому принадлежит это хранилище?Кто выпустит его?
Вам нужно просто взять ссылки и вернуть по значению, что-то вроде:
template <typename T>
Point<T> operator +(Point<T> const& point, Vector<T> const& vector) {
return Point<T>(point.x + vector.x, point.y + vector.y);
}