mirror of https://github.com/rust-lang/rust
31 lines
695 B
Rust
31 lines
695 B
Rust
pub trait TryAdd<Rhs = Self> {
|
|
type Error;
|
|
type Output;
|
|
|
|
fn try_add(self, rhs: Rhs) -> Result<Self::Output, Self::Error>;
|
|
}
|
|
|
|
impl<T: TryAdd> TryAdd for Option<T> {
|
|
type Error = <T as TryAdd>::Error;
|
|
type Output = Option<<T as TryAdd>::Output>;
|
|
|
|
fn try_add(self, rhs: Self) -> Result<Self::Output, Self::Error> {
|
|
Ok(self) //~ ERROR mismatched types
|
|
}
|
|
}
|
|
|
|
struct Other<A>(A);
|
|
|
|
struct X;
|
|
|
|
impl<T: TryAdd<Error = X>> TryAdd for Other<T> {
|
|
type Error = <T as TryAdd>::Error;
|
|
type Output = Other<<T as TryAdd>::Output>;
|
|
|
|
fn try_add(self, rhs: Self) -> Result<Self::Output, Self::Error> {
|
|
Ok(self) //~ ERROR mismatched types
|
|
}
|
|
}
|
|
|
|
fn main() {}
|