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.