Result<T, E> is an ordinary enum. There is nothing built into the language about it except one operator.
enum Result<T, E> { Ok(T), Err(E) }
? is that operator. Applied to a Result, it unwraps Ok and returns early on Err:
let n: i64 = raw.trim().parse()?;
which is exactly:
let n: i64 = match raw.trim().parse() {
Ok(v) => v,
Err(e) => return Err(From::from(e)),
};
