Taking a sized T by value is not the same as taking a reference to a potentially unsized T. Note that references are their own distinct concrete types, and not just a passing convention or whatnot. Moreover, other types support unsized generics, like Box<_> for instance.
This code can only accept references. For example, you can't make it consume a Vec<i32>. Compared to the code that just accepts a t: T, the above code is more restrictive in what it can accept. This can be done if the function body can only handle references and nothing else.