# Error code E0562

Abstract return types (written `impl Trait` for some trait `Trait`) are only allowed as function and inherent impl return types.

Erroneous code example:

    fn main() {
        let count_to_ten: impl Iterator<Item=usize> = 0..10;
        // error: `impl Trait` not allowed outside of function and inherent method
        //        return types
        for i in count_to_ten {
            println!("{}", i);
        }
    }

Make sure `impl Trait` only appears in return-type position.

    fn count_to_n(n: usize) -> impl Iterator<Item=usize> {
        0..n
    }

    fn main() {
        for i in count_to_n(10) {  // ok!
            println!("{}", i);
        }
    }

See RFC 1522 for more details.