digitalmars.D - Behaviour of alias this changed
- H. S. Teoh (17/17) May 08 2012 I have some code along these lines:
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (6/21) May 08 2012 Just a guess: It could be related to const-correctness improvements. Try...
- H. S. Teoh (8/29) May 08 2012 [...]
- Jonathan M Davis (6/37) May 08 2012 There's also @safe, pure, and nothrow. As I understand it, toString will...
- H. S. Teoh (10/33) May 08 2012 [...]
I have some code along these lines: struct S { short[4] data; alias this data; string toString() { ... } } ... S s; writeln(to!string(s)); In dmd 2.059 (I believe) and earlier, this calls S.toString(). However, in git dmd, this calls data.toString() instead. I'm just curious about the rationale for this change, and whether there's a way to override the toString() call so that it always calls S.toString()? T -- To err is human; to forgive is not our policy. -- Samuel Adler
May 08 2012
On 05/08/2012 10:11 AM, H. S. Teoh wrote:I have some code along these lines: struct S { short[4] data; alias this data; string toString() { ... } } ... S s; writeln(to!string(s)); In dmd 2.059 (I believe) and earlier, this calls S.toString(). However, in git dmd, this calls data.toString() instead. I'm just curious about the rationale for this change, and whether there's a way to override the toString() call so that it always calls S.toString()? TJust a guess: It could be related to const-correctness improvements. Try defining S.toString() as const. Ali -- D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html
May 08 2012
On Tue, May 08, 2012 at 10:15:00AM -0700, Ali Çehreli wrote:On 05/08/2012 10:11 AM, H. S. Teoh wrote:[...]I have some code along these lines: struct S { short[4] data; alias this data; string toString() { ... } } ... S s; writeln(to!string(s)); In dmd 2.059 (I believe) and earlier, this calls S.toString(). However, in git dmd, this calls data.toString() instead. I'm just curious about the rationale for this change, and whether there's a way to override the toString() call so that it always calls S.toString()?Just a guess: It could be related to const-correctness improvements. Try defining S.toString() as const.[...] I tried that, it didn't help. Declaring string toString() const {...} still has data.toString being called instead of S.toString. T -- Today's society is one of specialization: as you grow, you learn more and more about less and less. Eventually, you know everything about nothing.
May 08 2012
On Tuesday, May 08, 2012 10:30:53 H. S. Teoh wrote:On Tue, May 08, 2012 at 10:15:00AM -0700, Ali Çehreli wrote:There's also safe, pure, and nothrow. As I understand it, toString will eventually need to have all 4 of those attributes. pure doesn't work very well for toString yet though, since most of the string-related conversion functions can't be pure yet due to impure low level constructs that they use. - Jonathan M DavisOn 05/08/2012 10:11 AM, H. S. Teoh wrote:[...]I have some code along these lines: struct S { short[4] data; alias this data; string toString() { ... } } ... S s; writeln(to!string(s)); In dmd 2.059 (I believe) and earlier, this calls S.toString(). However, in git dmd, this calls data.toString() instead. I'm just curious about the rationale for this change, and whether there's a way to override the toString() call so that it always calls S.toString()?Just a guess: It could be related to const-correctness improvements. Try defining S.toString() as const.[...] I tried that, it didn't help. Declaring string toString() const {...} still has data.toString being called instead of S.toString.
May 08 2012
On Tue, May 08, 2012 at 01:52:14PM -0400, Jonathan M Davis wrote:On Tuesday, May 08, 2012 10:30:53 H. S. Teoh wrote:[...]On Tue, May 08, 2012 at 10:15:00AM -0700, Ali Çehreli wrote:On 05/08/2012 10:11 AM, H. S. Teoh wrote:I have some code along these lines: struct S { short[4] data; alias this data; string toString() { ... } } ... S s; writeln(to!string(s));[...] Yes, it would be nice to finally make toString const safe pure and nothrow. But the question still stands: what to do with the different behaviour of alias this in git dmd? T -- Famous last words: I wonder what will happen if I do *this*...I tried that, it didn't help. Declaring string toString() const {...} still has data.toString being called instead of S.toString.There's also safe, pure, and nothrow. As I understand it, toString will eventually need to have all 4 of those attributes. pure doesn't work very well for toString yet though, since most of the string-related conversion functions can't be pure yet due to impure low level constructs that they use.
May 08 2012