impl ops::Add<Complex> is for the type to the right.
for Complex is for the type to the left.
type Output = Complex is for the return type but you changed the function signature in a way that obscured the relationship.
You should instead use Self like this
impl Add<Self> for Complex {
type Output = Self;
fn add(self, _rhs: Self) -> Self::Output {
Self::default()
}
}
Depends on what do you even mean by that phrase. Your Rust code doesn't make any sense, but perhaps you may write some C++ code that would make some sense?
That that question may be answered… because as it is I couldn't even imagine what you mean by your question: simple translation from trait to concept (closest thing to traits in C++) wouldn't be accepted by C++, too.