Why do we have transitive const, again?

Mehrdad wfunction at hotmail.com
Fri Sep 23 18:52:23 PDT 2011


On 9/23/2011 3:56 PM, Jonathan M Davis wrote:
> The complaints have generally been about the lack of logical const and 
> the inability to cast away const and modify variables _not_ about 
> transitiveness. I'm not say that there have been _no_ complaints about 
> the transitiveness about const, but I can't recall even _one_ issue 
> with it at the moment. It's the lack of logical const that's generally 
> complained about and has shown itself to be a major blocker for const 
> in some cases. - Jonathan M Davis 

But the only reason logical const is an issue is indeed the fact that 
const is transitive.

To illustrate, I run into problem almost every other time I use D, and 
to me it's *only* a problem because source is const:

class MyRange : InputRange!char
{
      char peeked;
      InputRange!char  source;
      char front() const
      {
          // How do I lazy-load the value?
          if (peeked == '\0')
          {
              peeked = source.front;
              // ERROR, popFront isn't const...
              source.popFront();
          }
          return peeked;
      }
}

If this isn't because of transitivity, then what is it? If only source 
wasn't implicitly const (and it wouldn't be in C++, since it'd be a 
const pointer to a non-const object) then this would be a piece of cake.

I run into this problem and similar ones so often that it's driven me 
away from D, as much as I was a fan. If you have a nice solution then 
please let me know.


More information about the Digitalmars-d mailing list