Ref parameter: intended behavior or bug?
BCS
ao at pathlink.com
Tue Aug 21 09:30:00 PDT 2007
Reply to Mike,
> I knocked up a sample program to demonstrate reference parameters,
> then got a result that wasn't at all what I expected:
>
> ====================================
>
> import std.stdio;
>
> struct MyStruct
> {
> ubyte[] contents;
> }
> class MyClass
> {
> ubyte[] contents;
> }
> void structDefault(MyStruct ms)
> {
> writefln("Struct default: %d", ms.sizeof);
> }
> void structRef(ref MyStruct ms)
> {
> writefln("Struct ref: %d", ms.sizeof);
> }
> void classDefault(MyClass mc)
> {
> writefln("Class default: %d", mc.sizeof);
> }
> void main()
> {
> MyStruct ms;
> MyClass mc = new MyClass;
> structDefault(ms);
> structRef(ms);
> classDefault(mc);
> }
> ==================================
>
> Here's the output:
>
> Struct default: 8
> Struct ref: 8
> Class default: 4
> The first and last are what I thought they would be, but I expected
> the Struct ref line to output 4, since it's supposed to be a ref
> parameter. I assume this to be a bug, but want to make sure there's
> not something intended going on.
>
I think the compiler is playing games with the perceived type of ref arguments.
I would guess that the type of ms in strutRef would end up being the same
as the type in structDefault.
More information about the Digitalmars-d-learn
mailing list