rust/src/test/ui/impl-trait/bound-normalization-fail.rs

49 lines
917 B
Rust
Raw Normal View History

2019-07-03 20:20:16 +00:00
// edition:2018
// See issue 60414
// Reduction to `impl Trait`
struct Foo<T>(T);
trait FooLike {
type Output;
}
2019-07-03 20:20:16 +00:00
impl<T> FooLike for Foo<T> {
type Output = T;
}
mod impl_trait {
use super::*;
trait Trait {
type Assoc;
}
/// `T::Assoc` can't be normalized any further here.
fn foo_fail<T: Trait>() -> impl FooLike<Output = T::Assoc> {
//~^ ERROR: type mismatch
Foo(())
2019-07-03 20:20:16 +00:00
}
}
// Same with lifetimes in the trait
mod lifetimes {
use super::*;
trait Trait<'a> {
type Assoc;
}
/// Missing bound constraining `Assoc`, `T::Assoc` can't be normalized further.
fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output = T::Assoc> {
//~^ ERROR: type mismatch
//~^^ ERROR `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
Foo(())
2019-07-03 20:20:16 +00:00
}
}
fn main() {}