struct Foo { static Func2(u: U) : U { return u; } static Func(t: T): T { foo: T = t; return Foo.Func2(foo); } } struct MemoryBlock { start: MemoryAddress; capacity: uint; AddressOf(index: uint): MemoryAddress { return start + (index * @sizeof()); } Get(index: uint): T { return @dereference(AddressOf(index)); } Set(index: uint, value: T): void { @memcpy(AddressOf(index), @addr(value), @sizeof()); } Free(): void { @free(start); } } struct Program { static Main(): int { x: int = 4; y: int = Foo.Func(x); block: MemoryBlock; block.capacity = y; block.start = @malloc(y * @sizeof()); z: MemoryAddress = block.AddressOf(2); Console.PrintLine("%p", block.start); block.Set(0, 5); block.Set(1, 3); block.Set(2, 9); block.Set(3, 100); Console.PrintLine("%i", block.Get(0)); Console.PrintLine("%i", block.Get(1)); Console.PrintLine("%i", block.Get(2)); Console.PrintLine("%i", block.Get(3)); block.Free(); return 0; } }