On 21/11/2011 20:06, Jesse Phillips wrote:
What you are describing is Head Const, and is not available.

http://www.d-programming-language.org/const-faq.html#head-const

It will not be added as it doesn't provide any guarantees about the code that 
is useful
to the compiler. It can't be added to the existing system without complicating 
the type
system even more, which outweighs the benefits.
<snip>

Guarantees about the code don't need to be useful to the compiler - they can be just useful to the programmer. After all, this is the main point of DbC.

And it doesn't need to be a full-fledged head const. At the simplest, a single-assignment variable could just be an rvalue - something of which the address cannot be taken and so the absence of head const becomes irrelevant.

That said, it isn't much complexity to allow the address to be taken of such a 
thing

    final T data;
    auto ptr = &data;

with the following rules:
- if T is a value type, immutable(something)[] or immutable(something)*, then &data is an immutable(T)*
- otherwise, &data is a const(T)*.

Once upon a time there was const/final/invariant.  What exactly did final do 
back then?

Stewart.

Reply via email to