Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
April 23, 2005 [class properties] Bugs | ||||
---|---|---|---|---|
| ||||
Was looking through the D changelog and found that .sizeof was made un-overridable. I remember when it wasn't.. in any case, I had a hunch, and tried a few other things. I found two more bugs. import std.stdio; class A { static uint alignof() { return 30; } int b; } void main() { // this really shouldn't be legal writefln(A.alignof); // this line causes errors //writefln(A.b.offsetof); } Note that .alignof can be redefined (bad), and for some reason, .offsetof causes the following errors: dtest.d(19): 'this' is only allowed in non-static member functions dtest.d(19): this for b needs to be type A not type int Using .offsetof on a member of an instantiated A works, however. This is inconsistent with the struct behavior, which is exactly the opposite - gives an error when trying to use .offsetof on a member of an instantiated struct, but works when using the struct type (i.e. for struct A with member b, A.b.offsetof). |
April 23, 2005 Re: [class properties] Bugs - another | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | "Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:d4c3qc$eu8$1@digitaldaemon.com... Just found another! I can overload offsetof as well. import std.stdio; class A { this() { b=new B; } class B { uint offsetof() { return 6756; } } B b; } void main() { A a=new A; writefln(a.b.offsetof); } |
April 23, 2005 Re: [class properties] Bugs | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Jarrett Billingsley schrieb am Fri, 22 Apr 2005 20:14:42 -0400: > Was looking through the D changelog and found that .sizeof was made un-overridable. I remember when it wasn't.. in any case, I had a hunch, and tried a few other things. I found two more bugs. > > import std.stdio; > > class A > { > static uint alignof() > { > return 30; > } > > int b; > } > > void main() > { > // this really shouldn't be legal > writefln(A.alignof); > > // this line causes errors > //writefln(A.b.offsetof); > } > > Note that .alignof can be redefined (bad), and for some reason, .offsetof causes the following errors: > > dtest.d(19): 'this' is only allowed in non-static member functions > dtest.d(19): this for b needs to be type A not type int > > Using .offsetof on a member of an instantiated A works, however. This is inconsistent with the struct behavior, which is exactly the opposite - gives an error when trying to use .offsetof on a member of an instantiated struct, but works when using the struct type (i.e. for struct A with member b, A.b.offsetof). Added to DStress as http://dstress.kuehne.cn/nocompile/alignof_01.d http://dstress.kuehne.cn/nocompile/alignof_02.d http://dstress.kuehne.cn/nocompile/alignof_03.d http://dstress.kuehne.cn/nocompile/alignof_04.d http://dstress.kuehne.cn/nocompile/offsetof_74.d http://dstress.kuehne.cn/nocompile/offsetof_75.d http://dstress.kuehne.cn/nocompile/offsetof_76.d http://dstress.kuehne.cn/nocompile/offsetof_77.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCaeiG3w+/yD4P9tIRAr1UAJ9S2sXkQ3Cwf8AWvDzQsNPq2kaU8QCeMc7s BDiYNpoCqpaM++WZpSNgmA0= =7b4/ -----END PGP SIGNATURE----- |
Copyright © 1999-2021 by the D Language Foundation