the const correctness of the this pointer

Jason House jason.james.house at gmail.com
Mon Dec 28 07:50:02 PST 2009


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.



More information about the Digitalmars-d mailing list