_tldr; if the size of integer is important, always opt to explicit conversion_
* * * you can define your own `+` operator for your case proc `+`(x: uint16, y: uint32): uint32 = x.uint32 + y Run But then the definition then become tedious if you have to define another with proc `+`(x: uint32, y: uint64): uint64 = x.uint64 + y Run again and again. So the `+` is defined as generic. Since generic doesn't know which type should it bind to, so it's logical choice to bind to first argument.