//@ check-pass | |
pub trait Build { | |
type Output<O>; | |
fn build<O>(self, input: O) -> Self::Output<O>; | |
} | |
pub struct IdentityBuild; | |
impl Build for IdentityBuild { | |
type Output<O> = O; | |
fn build<O>(self, input: O) -> Self::Output<O> { | |
input | |
} | |
} | |
fn a() { | |
let _x: u8 = IdentityBuild.build(10); | |
} | |
fn b() { | |
let _x: Vec<u8> = IdentityBuild.build(Vec::new()); | |
} | |
fn c() { | |
let mut f = IdentityBuild.build(|| ()); | |
(f)(); | |
} | |
pub fn main() { | |
a(); | |
b(); | |
c(); | |
} |