It doesn't seem to be specific to type `size_t` - it also happens with other
native types such as `int`.
Shorter example:
➜ sub a (int $a) { Blob[int].new($a) }; say a 12;
Type check failed in initializing element #0 to Blob[int]; expected int but
got Int (12)
Examples that *don't* fail:
➜ sub a (int $a is copy) { Blob[int].new($a) }; say a 12;
Blob[int]:0x<0c>
➜ sub a (Int $a) { Blob[int].new($a) }; say a 12;
Blob[int]:0x<0c>
➜ my int $a = 12; say Blob[int].new($a);
Blob[int]:0x<0c>
I think it's safe to say that in all four cases, `$a` gets boxed to an `Int`.
But in the first case, it's as if the Blob constructor nonetheless uses the
code path for `int` and subsequently gets surprised.
Maybe the `int $a` signature leads the compiler to think that it will always be
an `int`?