You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use std::error::Error;use std::io::{self,ErrorKind};fncaused_of<'a>(muterr:&'a (Error + 'static)) -> Option<&'a io::Error>{loop{match err.downcast_ref::<io::Error>(){None => match err.cause(){None => returnNone,Some(cause) => err = cause,},
d => return d,}}}fnmain(){let e = io::Error::new(ErrorKind::Other,"oh no!");println!("{:?}", caused_of(&e));}
According to Book, cause's lifetime should be err's lifetime. which is 'a, so it should be safe to assign cause to err directly. But I got following warnnings:
test.rs:8:34: 8:39 error: cannot infer an appropriate lifetime for autoref due to conflicting requirements [E0495]
test.rs:8 None => match err.cause() {
^~~~~
test.rs:8:30: 8:41 note: first, the lifetime cannot outlive the method call at 8:29...
test.rs:8 None => match err.cause() {
^~~~~~~~~~~
test.rs:8:30: 8:33 note: ...so that method receiver is valid for the method call
test.rs:8 None => match err.cause() {
^~~
test.rs:5:75: 15:25 note: but, the lifetime must be valid for the lifetime 'a as defined on the block at 5:74...
test.rs:5 fn caused_of<'a>(mut err: &'a (Error + 'static)) -> Option<&'a io::Error> {
^
test.rs:10:48: 10:53 note: ...so that trait type parameters matches those specified on the impl (expected std::ops::CoerceUnsized<&'a std::error::Error + 'static>, found std::ops::CoerceUnsized<&std::error::Error + 'static>)
test.rs:10 Some(cause) => err = cause,
^~~~~
error: aborting due to previous error
Am I missing something here?
The text was updated successfully, but these errors were encountered:
Consider following snippet:
According to Book, cause's lifetime should be err's lifetime. which is 'a, so it should be safe to assign cause to err directly. But I got following warnnings:
Am I missing something here?
The text was updated successfully, but these errors were encountered: