-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-lifetimesArea: Lifetimes / regionsArea: Lifetimes / regionsE-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.
Description
I have the following code:
#[deriving(Clone)]
pub struct Foo {
priv f: fn(char, |char|)
}
impl Foo {
fn bar(&self) {
((*self).f)('a', |c: char| { println!("{}", c); });
}
}
fn bla(c: char, cb: |char|) {
cb(c);
}
pub fn make_foo() -> Foo {
Foo {
f: bla
}
}
fn main() {
let a = make_foo();
a.bar();
}
Which currently produces this error:
test.rs:3:10: 3:29 error: mismatched types: expected `fn(char, |char|)` but found `fn(char, |char|)` (expected concrete lifetime, but found bound lifetime parameter &)
test.rs:3 priv f: fn(char, |char|)
^~~~~~~~~~~~~~~~~~~
note: expected concrete lifetime is lifetime ReInfer(ReVar(middle::ty::RegionVid{id: 22u}))
error: aborting due to previous error
This is apparently caused by the closure passed to the referenced function not having a lifetime.
IMHO this should be perfectly legal, because the struct does not actually reference the closure itself.
Metadata
Metadata
Assignees
Labels
A-lifetimesArea: Lifetimes / regionsArea: Lifetimes / regionsE-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.