You don't have to produce two implementations. The current one is fine. Just slap an appropriate type annotation on the call when it's needed.
Well, it may work here, but I need it in My other topic about ref, owned, generics and iterator adaptor, where I want to create ParialSums trait should work for both Iterator<Item=T>
and Iterator<Item=&T>
and that whole thing confuses me a lot. For instance, I checked out how the std deals with it, for example sum and product, so std uses macro generated implementations, they in fact produce handcoded impl for each primitive numeric type AND for all references on them. And I can't find an apropriate way, how one can create his own collection of adapters easily on numeric types (and their references). Things that are easily done in haskell (never thought I would say easy and haskell in one sentence) are serious challenges for me in Rust.