Yeah, file an issue. They work like in C++ or other languages, the first usage binds the type to the type variable other usages check for consistency with the bound type. As mratsim already explained:
> The signature of the proc is proc +[T: SomeInteger](x, y: T): T T is bound to > uint32 in the first case, and we can convert uint16 to uint32 losslessly. In > the second case, T is bound to uint16 and we can't convert uint32 to uint16 > losslessly. .
