// run-pass

#![allow(unused_imports)]
// Test a regression found when building compiler. The `produce()`
// error type `T` winds up getting unified with result of `x.parse()`;
// the type of the closure given to `unwrap_or_else` needs to be
// inferred to `usize`.

use std::num::ParseIntError;

fn produce<T>() -> Result<&'static str, T> {
    Ok("22")
}

fn main() {
    let x: usize = produce()
        .and_then(|x| x.parse())
        .unwrap_or_else(|_| panic!());
    println!("{}", x);
}