59 lines
1.0 KiB
Rust
59 lines
1.0 KiB
Rust
#![deny(refining_impl_trait)]
|
|
|
|
pub trait Foo {
|
|
fn bar() -> impl Sized;
|
|
}
|
|
|
|
pub struct A;
|
|
impl Foo for A {
|
|
fn bar() -> impl Copy {}
|
|
//~^ ERROR impl method signature does not match trait method signature
|
|
}
|
|
|
|
pub struct B;
|
|
impl Foo for B {
|
|
fn bar() {}
|
|
//~^ ERROR impl method signature does not match trait method signature
|
|
}
|
|
|
|
pub struct C;
|
|
impl Foo for C {
|
|
fn bar() -> () {}
|
|
//~^ ERROR impl method signature does not match trait method signature
|
|
}
|
|
|
|
struct Private;
|
|
impl Foo for Private {
|
|
fn bar() -> () {}
|
|
}
|
|
|
|
pub trait Arg<A> {
|
|
fn bar() -> impl Sized;
|
|
}
|
|
impl Arg<Private> for A {
|
|
fn bar() -> () {}
|
|
}
|
|
|
|
pub trait Late {
|
|
fn bar<'a>(&'a self) -> impl Sized + 'a;
|
|
}
|
|
|
|
pub struct D;
|
|
impl Late for D {
|
|
fn bar(&self) -> impl Copy + '_ {}
|
|
//~^ ERROR impl method signature does not match trait method signature
|
|
}
|
|
|
|
mod unreachable {
|
|
pub trait UnreachablePub {
|
|
fn bar() -> impl Sized;
|
|
}
|
|
|
|
struct E;
|
|
impl UnreachablePub for E {
|
|
fn bar() {}
|
|
}
|
|
}
|
|
|
|
fn main() {}
|