the const correctness of the this pointer

TM ithink at therefore.iam
Mon Dec 28 09:35:34 PST 2009


Jason House Wrote:

> Steven Schveighoffer Wrote:
> 
> > 
> > This might be a difficult thing to fix, but it definitely *definitely*  
> > needs to be fixed.  The problem is that a delegate stores a function  
> > pointer and a context pointer.  However, it does not type the context  
> > pointer.  For example, if you do this:
> > 
> > import std.stdio;
> > 
> > class A
> > {
> >      void f() const {}
> > }
> > 
> > void main()
> > {
> >      const A a = new A;
> >      a.f();
> >      auto g = &a.f;
> >      writefln("%s", typeof(g).stringof);
> > }
> > 
> > You will get this:
> > 
> > void delegate()
> > 
> > The this pointer is hidden, and so is it's const decoration.  I would  
> > expect to see:
> > 
> > void delegate() const
> > 
> > I'll file a bugzilla request for this.
> > 
> > -Steve
> 
> 
> I disagree. Once the delegate is passed off to some other region of code, why should that other code care that there's an object that might not get modified from using the delegate? Especially when you consider that which object or stack frame is not tracked by the type system. Pure delegates make sense to me though.


I disagree with you. To me, the loss of the frame pointer's const attribute looks like a cast. I do not expect to be allowed to call the above 'a.f' wihout casting a into a const A. And yet it is possible by using a delegate, which I think performs a hidden cast operation.

I think Steven Schveighoffer is right. Moreover the const correctness of the this pointer is well managed as far as objects are concerned, so why not have the same behaviour with delegate ? 




More information about the Digitalmars-d mailing list