Если я определяю operator+
для типа, обычным образом
struct S {};
S operator+(S const &, S const &) {
return {};
}
пользователи S
могут написать код, подобный
S s{};
s + s = S{}; // huh
Из того, что я могу сказать, operator+
возвращает временный объект типа S
, который затем назначается. Затем объект умирает в конце оператора, потому что для него нет имени, и, таким образом, оператор фактически не используется.
Я не вижу никакого смысла в таком коде, поэтому я хотел бы хотел бы сделать это ошибка компиляции. Есть способ сделать это? Даже предупреждение было бы лучше, чем ничего.