(maybe not correct explanation, can see someone else giving different.)
To avoid type annotation the compiler has to find a single data type to substitute for generic S. Since data types can be made from generic (or there can be generic implementation of Sum) there is potentially infinite types to search.
Alternatively; Imagine if it worked without. Your using a crate and that crate gets updated with a implementation. Your code would suddenly break from the second choice.