is() and const

Jonathan M Davis jmdavisProg at gmx.com
Wed Jul 18 02:16:51 PDT 2012


On Wednesday, July 18, 2012 10:43:23 Andrea Fontana wrote:
> So:
> const(int) : int  <-- true

const int is implicitly convertible to int, because it's a value type, and 
assigning a const int to an int (or vice versa) makes a copy.

> const(PP) : PP  <-- false

const PP is not implicitly convertible to PP, because it's a reference type. 
So, assigning a PP to a PP doesn't make a copy. It just copies the reference. 
And a const PP can't be converted to a mutable PP, because that would be 
dropping the const, invalidating const's guarantees.

If PP were a struct with no pointers, arrays, or reference types (or it had a 
postblit constructor), then it would be a value type, and const PP _would_ 
implicitly convert to PP.

> Is this behaviour correct?

Yes.

> And how can I check if T is of a certain class ignoring consts (and
> avoiding double checks)?

is(Unqual!T == T)

Unqual is in std.traits.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list