Вставка функций в std
делает вашу программу плохо сформированной, диагностика не требуется.
В определенных ограниченных обстоятельствах вы можете вставить специализации в std
, но это не может делать то, что вы хотите здесь.
То есть вы не можете вставить vec + vec
в std
.
Помещение оператора в другое пространство имен допустимо, но не рекомендуется. Операторы не работают хорошо, когда их невозможно найти с помощью ADL / Koenig lookup. Код, который кажется разумным, например, std::accumulate( vec_of_vec.begin(), vec_of_vec.end(), std::vector<int>{} )
, не компилируется, среди прочих проблем.
Краткий ответ: vector
не ваш тип. Не делай этого.
Вы можете создавать вспомогательные функции в других местах, например util::elementwise_add( vec, vec )
.
В std
не реализовано +
, поскольку разумны как конкатенационные, так и поэлементные операции valarray
осуществляет поэлементные операции; возможно, что вы хотите, это std::valarray<int>
вместо std::vector<int>
.
В противном случае вы можете написать именованный оператор vec +by_elem+ vec
или наследовать от std::vector
в своем собственном пространстве имен, использовать этот тип и перегрузить +
для вашего типа. (Наследование от std::vector
довольно безопасно; пока никто не играет с кучей, выделенными необработанными указателями на std::vector
с или аналогичными)