Перегрузка оператора C ++ для указателей

Интересно (просто из любопытства), почему перегрузка операторов не разрешена в C ++ для указателей. Я имею в виду что-то вроде этого:

Vector2d* operator+(Vector2d* a, Vector2d* b) { return new Vector2d(a.x + b.x, a.y + b.y); }

Vector2d* a = new Vector2d(1, 1); 
Vector2d* b = new Vector2d(2, 2); 
Vector2d* c = a + b; 

Обратите внимание, как «a + b» создает новый объект Vector, но затем копирует только его адрес в «c», не вызывая конструктор копирования. Таким образом, это решило бы ту же проблему, что и новые ссылки на rvalue. Кроме того, насколько я знаю, это в значительной степени эквивалентно тому, что происходит при использовании перегрузки операторов в C # (но я могу ошибаться, я никогда не использовал C #), и почему ссылки на rvalue не нужны в C #.

Правда, эталонное решение rvalue еще лучше, так как оно позволяет основанным на стеке объектам, хотя эта перегрузка заставила бы все объекты Vector2d жить в куче, но все же это, по-видимому, было бы легко реализовать в компиляторах, возможно, за много лет до того, как рефери пришли. А с пользовательскими распределителями это даже не будетэто медленный.

Так что это только незаконно из-за принципа «наименьшего удивления» или есть и другие причины?

Ответы на вопрос(2)

Ваш ответ на вопрос