Closed
Description
struct Foo<'a> {
_s: &'a str
}
struct Bar<H: Handler> {
handler: H
}
trait Handler {
fn handle<'a>(&'a self, foo: Foo<'a>);
}
impl<F> Handler for F where F: Fn(Foo) {
fn handle<'a>(&'a self, foo: Foo<'a>) {
self(foo)
}
}
fn main() {
let foo = Foo { _s: "foo" };
let bar = Bar { handler: |_f /*: Foo*/| {} }; // uncomment to work
(bar.handler)(foo);
}
Gives:
error: type mismatch: the type `[closure test.rs:8:23: 20:6]` implements the trait `core::ops::Fn<(_, _)>`, but the trait `for<'r,'r,'r> core::ops::Fn<(hyper::server::request::Request
<'r, 'r>, hyper::server::response::Response<'r>)>` is required (expected concrete lifetime, found bound lifetime parameter ) [E0281]
Playpen: http://is.gd/E7sskd
Couldn't tell if this was #16473, @reem thinks it might be different. Either way, this hurts using hyper's server easily: Server::http(|req, res| {}).listen(8080)
.