digitalmars.D.bugs - struct.<field>.offsetof
- Thomas Kuehne (16/16) Dec 01 2004 -----BEGIN PGP SIGNED MESSAGE-----
- Regan Heath (20/27) Dec 01 2004 Try this instead:
- Thomas Kuehne (17/44) Dec 01 2004 -----BEGIN PGP SIGNED MESSAGE-----
- Regan Heath (22/72) Dec 01 2004 For classes but not for structs. For structs you are supposed to be able...
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 struct.<field>.offsetof is not supported. struct.html: test case: http://svn.kuehne.cn/dstress/run/offsetof_01.d Thomas -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.9.12 (GNU/Linux) iD8DBQFBrbmj3w+/yD4P9tIRAvcRAKCsI0/P2vAYfUTvhOigxttiAohFZACffZw2 ZD7QR3yzwbiCZP6qiw7dB9o= =UpiQ -----END PGP SIGNATURE-----
Dec 01 2004
On Wed, 1 Dec 2004 13:31:31 +0100, Thomas Kuehne <thomas-dloop kuehne.thisisspam.cn> wrote:struct.<field>.offsetof is not supported. struct.html: test case: http://svn.kuehne.cn/dstress/run/offsetof_01.dTry this instead: // $HeadURL$ // $Date$ // $Author$ module dstress.run.offsetof_01; struct MyStruct{ int a; int b; } int main(){ assert(MyStruct.a.offsetof >= 0); assert(MyStruct.b.offsetof >= 0); assert(MyStruct.a.offsetof != MyStruct.b.offsetof); return 0; } IIRC this property applies to the struct definition *not* the struct instance. Regan
Dec 01 2004
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Regan Heath schrieb am Thu, 02 Dec 2004 09:54:55 +1300:On Wed, 1 Dec 2004 13:31:31 +0100, Thomas KuehneThat's strange. For classes it's the other way round: the property applies only to the instance and not the class definition !? I can come up with an explanation why - under some uncommon circumstances - the offsetof property can only be determined for instances. Why should a property that is available for the definition not be available for the instance? Thomas -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.9.12 (GNU/Linux) iD8DBQFBrjLz3w+/yD4P9tIRAgEtAJ4y/5o8mo8+RP2Ux6YGsGWJ27msmQCfTVAP 0yvaME+kPAof7cYnmF3NdCI= =sfU0 -----END PGP SIGNATURE-----struct.<field>.offsetof is not supported. struct.html: test case: http://svn.kuehne.cn/dstress/run/offsetof_01.dTry this instead: // $HeadURL$ // $Date$ // $Author$ module dstress.run.offsetof_01; struct MyStruct{ int a; int b; } int main(){ assert(MyStruct.a.offsetof >= 0); assert(MyStruct.b.offsetof >= 0); assert(MyStruct.a.offsetof != MyStruct.b.offsetof); return 0; } IIRC this property applies to the struct definition *not* the struct instance.
Dec 01 2004
On Wed, 1 Dec 2004 22:09:07 +0100, Thomas Kuehne <thomas-dloop kuehne.thisisspam.cn> wrote:-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Regan Heath schrieb am Thu, 02 Dec 2004 09:54:55 +1300:For classes but not for structs. For structs you are supposed to be able to align and lay them out how you want. So at compile time the offsets are known. I suspect that is why the definition is used for structs and the instance for classes.On Wed, 1 Dec 2004 13:31:31 +0100, Thomas KuehneThat's strange. For classes it's the other way round: the property applies only to the instance and not the class definition !? I can come up with an explanation why - under some uncommon circumstances - the offsetof property can only be determined for instances.struct.<field>.offsetof is not supported. struct.html: test case: http://svn.kuehne.cn/dstress/run/offsetof_01.dTry this instead: // $HeadURL$ // $Date$ // $Author$ module dstress.run.offsetof_01; struct MyStruct{ int a; int b; } int main(){ assert(MyStruct.a.offsetof >= 0); assert(MyStruct.b.offsetof >= 0); assert(MyStruct.a.offsetof != MyStruct.b.offsetof); return 0; } IIRC this property applies to the struct definition *not* the struct instance.Why should a property that is available for the definition not be available for the instance?Good question. If it's available for the definition then surely it can be made available for the instance.. it might be an optimisation thing, why store the info 'in' the struct when it's not required. However surely some compiler trickery could deduce the struct type from the instance and turn.. struct foobar { int a; } foobar b; b.a.offsetof into.. struct foobar { int a; } foobar b; foobar.a.offsetof Regan-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.9.12 (GNU/Linux) iD8DBQFBrjLz3w+/yD4P9tIRAgEtAJ4y/5o8mo8+RP2Ux6YGsGWJ27msmQCfTVAP 0yvaME+kPAof7cYnmF3NdCI= =sfU0 -----END PGP SIGNATURE-----
Dec 01 2004