diff --git a/src/test/ui/issues/issue-58344.rs b/src/test/ui/issues/issue-58344.rs new file mode 100644 index 0000000000000..99b656d74f505 --- /dev/null +++ b/src/test/ui/issues/issue-58344.rs @@ -0,0 +1,50 @@ +use std::ops::Add; + +trait Trait { + fn get(self) -> T; +} + +struct Holder(T); + +impl Trait for Holder { + fn get(self) -> T { + self.0 + } +} + +enum Either { + Left(L), + Right(R), +} + +impl Either { + fn converge(self) -> T where L: Trait, R: Trait { + match self { + Either::Left(val) => val.get(), + Either::Right(val) => val.get(), + } + } +} + +fn add_generic, B>(lhs: A, rhs: B) -> Either< + impl Trait<>::Output>, + impl Trait<>::Output> +> { + if true { + Either::Left(Holder(lhs + rhs)) + } else { + Either::Right(Holder(lhs + rhs)) + } +} + +fn add_one( + value: u32, +) -> Either>::Output>, impl Trait<>::Output>> { + //~^ ERROR: the trait bound `impl Trait<::Output>: Trait` + //~| ERROR: the trait bound `impl Trait<::Output>: Trait` + add_generic(value, 1u32) +} + +pub fn main() { + add_one(3).converge(); +} diff --git a/src/test/ui/issues/issue-58344.stderr b/src/test/ui/issues/issue-58344.stderr new file mode 100644 index 0000000000000..427d03b679d5f --- /dev/null +++ b/src/test/ui/issues/issue-58344.stderr @@ -0,0 +1,19 @@ +error[E0277]: the trait bound `impl Trait<::Output>: Trait` is not satisfied + --> $DIR/issue-58344.rs:42:13 + | +LL | ) -> Either>::Output>, impl Trait<>::Output>> { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait` is not implemented for `impl Trait<::Output>` + | + = note: the return type of a function must have a statically known size + +error[E0277]: the trait bound `impl Trait<::Output>: Trait` is not satisfied + --> $DIR/issue-58344.rs:42:52 + | +LL | ) -> Either>::Output>, impl Trait<>::Output>> { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Trait` is not implemented for `impl Trait<::Output>` + | + = note: the return type of a function must have a statically known size + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`.