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