I’m surprised by the ambiguity shown in the last example. Shouldn’t the concrete return type for an implInto<u32> be completely inaccessible outside of the function? Otherwise it would allow to introduce breaking changes without changing a function API.
But in this case, how would it be possible that impl_trait().into() is an u16?
I guess it’s only accessible to the mem::size_of because it has an implicit Sized bound as well. So really the bound is impl Into<u32> + Sized and I don’t think the code using the function is assuming anything else.
But I do agree it feels weird. I feel like the function should know its return type regardless of how it is used?
I’m surprised by the ambiguity shown in the last example. Shouldn’t the concrete return type for an
impl Into<u32>
be completely inaccessible outside of the function? Otherwise it would allow to introduce breaking changes without changing a function API.But in this case, how would it be possible that
impl_trait().into()
is anu16
?I guess it’s only accessible to the mem::size_of because it has an implicit Sized bound as well. So really the bound is impl Into<u32> + Sized and I don’t think the code using the function is assuming anything else.
But I do agree it feels weird. I feel like the function should know its return type regardless of how it is used?