() dostuff[T](var T#[3]^ ptr) { // FIXME should this really be allowed? should at least require a length parameter. } () dostuff2(var any^ ptr) { } () dostuff3[T](var T^ ptr) { } () dostuff4(var byte#[3]^ ptr) { } () test() { var byte#[3] data = [1,2,3]; var byte#[3]^ dataptr = @data; // TODO autodetect the type parameter from the argument types! dostuff[byte](@data); dostuff[byte](@data as var byte#[3]^); dostuff[byte](dataptr); dostuff2(@data); dostuff2(@data as var byte#[3]^); dostuff2(dataptr); dostuff3[byte#[3]](@data); dostuff3[byte#[3]](@data as var byte#[3]^); dostuff4(@data); dostuff[byte](@data); any^ ap = @data; }