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`?

Reply via email to