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