My guess is this is the behavior you get because you're using integer literals and those are always "int"s at macro resolution time.
It should work like you want if you do: proc main() = test( 1.printType(), 2'i16.printType(), 3'i32.printType() ) Run