mirror of https://github.com/rust-lang/rust
34 lines
499 B
Rust
34 lines
499 B
Rust
//@ 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();
|
|
}
|