Why do some trait implementations receive values, while others take references? related: Why isn't it possible to compare a borrowed integer to a literal integer? why does Rust's Add trait take ownership?