After reading this, I'll have a similar question about overloading math operators.
Considering this code basis, which assumes that T objects can be added by value and gives a O:
use std::ops::Add;
struct NoCopy<T>(T);
impl<T: Add<Output = O>, O> Add for NoCopy<T> {
type Output = NoCopy<O>;
fn add(self, other: Self) -> Self::Output {
NoCopy(self.0 + other.0)
}
}
fn main() {
let a = NoCopy::<isize>(5);
let b = NoCopy::<isize>(3);
let _c = a + b;
}
I would like to provide with one implementation of the Add trait to work on &NoCopy<T> and provide a NoCopy<O> instance, making the assumption that Add operator is provided for &T (and gives a O). T would not require to respect the Copy trait.
But I can't figure out how to write it, especially the generics bindings.
impl<???> Add for &NoCopy<T> {
type Output = NoCopy<O>;
fn add(self, other: Self) -> Self::Output {
NoCopy(&self.0 + &other.0)
}
}
What the missing part (???) would look like?