This comes up quite often in fallible iterators as well as async {} blocks, and I need to write ugly syntax like Ok::<_, Error>().
Would it be terrible to let the compiler assume no error conversion in such case, as if From wasn't used in the ? desugaring? Perhaps the blanket impl From<T> for T could be tagged as a magic preferred default in case of ambiguities.
vec!["1", "2"].into_iter().map(|s| try {
let x: u32 = s.parse()?;
x + 1
});
and it would just work.
Note also that with the new desugaring (as of RFC 3058) the From is Result-specific, so this problem doesn't exist for Option -- and if the traits stabilize, it could allow using new result-like types that would have the conversion as an extra opt-in step instead of always.