Behaviour of alias this changed

Jonathan M Davis jmdavisProg at gmx.com
Tue May 8 10:59:07 PDT 2012


On Tuesday, May 08, 2012 10:57:20 H. S. Teoh wrote:
> 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));
> 
> [...]
> 
> > > 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.
> 
> [...]
> 
> 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?

I'd argue that what you're seeing is a bug, but it may be due in part to a 
partial transition to requiring toString to be const @safe pure nothrow.

- Jonathan M Davis


More information about the Digitalmars-d mailing list