AA key conversion woes

Steven Schveighoffer schveiguy at yahoo.com
Thu Apr 19 04:24:17 PDT 2012


On Tue, 17 Apr 2012 19:51:40 -0400, H. S. Teoh <hsteoh at quickfur.ath.cx>  
wrote:

> Does "tail-immutable" mean that if you strip away one layer of the type
> (i.e., x[] becomes x) then the result is immutable? Or does it mean only
> the *last* layer of the type is immutable?

tail immutable (and by extension tail-const) is defined as, the portion of  
the type which is passed by value is mutable, while any data passed by  
reference is immutable.  In other words, if a type is tail-immutable,  
whatever it points at is immutable, but whatever is pointing (i.e. the  
head) is mutable.

Three examples:

mutable
================
int *
int[]
struct S
{
    int * x;
    int y;
}


immutable
================
immutable(int*)
immutable(int[])
struct SI
{
     immutable(int *) x;
     immutable(int) y;
}

tail-immutable
================
immutable(int) *
immutable(int)[]
struct STI
{
    immutable(int) * x;
    int y;
}

note that I rewrote the struct to show you what immutable(S) and a  
theoretical tail-immutable(S) would do.  I think this illustrates the  
point better.  We currently have no way of specifying STI in terms of S.

-Steve


More information about the Digitalmars-d mailing list