38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
|
|
// rust-lang/rust#57979 : the initial support for `impl Trait` didn't
|
||
|
|
// properly check syntax hidden behind an associated type projection.
|
||
|
|
// Here we test behavior of occurrences of `impl Trait` within an
|
||
|
|
// `impl Trait` in that context.
|
||
|
|
|
||
|
|
mod allowed {
|
||
|
|
#![allow(nested_impl_trait)]
|
||
|
|
|
||
|
|
pub trait Foo<T> { }
|
||
|
|
pub trait Bar { }
|
||
|
|
pub trait Quux { type Assoc; }
|
||
|
|
pub fn demo(_: impl Quux<Assoc=impl Foo<impl Bar>>) { }
|
||
|
|
}
|
||
|
|
|
||
|
|
mod warned {
|
||
|
|
#![warn(nested_impl_trait)]
|
||
|
|
|
||
|
|
pub trait Foo<T> { }
|
||
|
|
pub trait Bar { }
|
||
|
|
pub trait Quux { type Assoc; }
|
||
|
|
pub fn demo(_: impl Quux<Assoc=impl Foo<impl Bar>>) { }
|
||
|
|
//~^ WARN nested `impl Trait` is not allowed
|
||
|
|
//~| WARN will become a hard error in a future release!
|
||
|
|
}
|
||
|
|
|
||
|
|
mod denied {
|
||
|
|
#![deny(nested_impl_trait)]
|
||
|
|
|
||
|
|
pub trait Foo<T> { }
|
||
|
|
pub trait Bar { }
|
||
|
|
pub trait Quux { type Assoc; }
|
||
|
|
pub fn demo(_: impl Quux<Assoc=impl Foo<impl Bar>>) { }
|
||
|
|
//~^ ERROR nested `impl Trait` is not allowed
|
||
|
|
//~| WARN will become a hard error in a future release!
|
||
|
|
}
|
||
|
|
|
||
|
|
fn main() { }
|