Why do we have transitive const, again?

Walter Bright newshound2 at digitalmars.com
Sat Sep 24 20:41:02 PDT 2011


On 9/24/2011 7:31 PM, Jonathan M Davis wrote:
> Well I suppose that it's a matter of semantics, but it's _not_ valid code,
> because D's const is not a logical const and does not support logical const in
> any way.

I think that's the gist of it. Logical const is NOT CONST in D.


> The problem is the fact that there is no way in D to express the
> particular paradigm that you want to express - logical const.

There is:

struct LogicalConst(T)
{
     @property T v() {
        if (!set) {
           _v = some_expensive_computation();
           set = true;
        }
        return _v;
     }

   private:
     bool set = false;
     T _v;
}

Granted, that's a different way of doing it than C++ does it, but it is 
perfectly doable. It doesn't do anything dirty, unsafe, or underhanded. It isn't 
a fraud. It's even typesafe.


More information about the Digitalmars-d mailing list