non-const reference to const instance of class

Jonathan M Davis jmdavisProg at gmx.com
Wed Oct 10 10:11:29 PDT 2012


On Wednesday, October 10, 2012 19:02:31 Zhenya wrote:
> Hi!
> 
> I thought that this should compile:
> class Foo{}
> 
> const(Foo) foo = new Foo;// the same that const Foo foo?
> foo = new Foo;
> 
> but compiler say that foo is const reference and it can't modify
> it.
> It is normally?If yes,how can I declare non-const reference to
> const instance of class?

const Foo and const(Foo) are the same thing. They both create a const 
reference to const data. This is in contrast to a pointer where const Bar* and 
const(Bar)* are different. With a reference, there is no way to indicate that 
the object is const but not the reference. The type system just doesn't 
support the idea of a class object existing separately from a reference, so 
there's no way to make that distinction.

If you want to have a mutable reference to a const object, then you need a 
wrapper around the reference where the wrapper is mutable but the reference 
isn't. std.typecons.Rebindable does this. It's what you should use.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list