_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.
