That is, impl Trait in argument position is syntactic sugar for a generic type parameter like <T: Trait>, except that the type is anonymous and doesn't appear in the GenericParams list.
It can thus be very surprising that Case 2 is alright, but Case 1 fails.
See also this discussion in the Rust users Forum for an idea what should/could be done about it.
Alternatively, this surprising behavior could be mentioned in the documentation.
Case 1:
expands to:
which is not functioning as expected.
Case 2:
works however.
The Rust reference states for anonymous type parameters:
It can thus be very surprising that Case 2 is alright, but Case 1 fails.
See also this discussion in the Rust users Forum for an idea what should/could be done about it.
Alternatively, this surprising behavior could be mentioned in the documentation.