Purity, @safety, etc., in generic code

Jonathan M Davis jmdavisProg at gmx.com
Fri Feb 22 12:27:25 PST 2013


On Friday, February 22, 2013 14:31:55 Steven Schveighoffer wrote:
> It is probably rare to have both a const and non-const overload, that is
> true, but it is not up to D to decide what design is best. We should take
> the most flexible approach, and allow designers to come up with whatever
> ideas they like. I don't think there is any significant extra work
> required to support const method overloads in the compiler, in fact it
> would be a more significant change to make that an exception.

A prime example of where overloading on const can be useful is caching. You 
can write a function which caches its result for efficiency purposes, but the 
const version can't cache, whereas the non-const one can. So, you can do 
something like

auto calculate()
{
 if(_dirty)
 _cache = _doCalculation();
 return _cache;
}

auto calculate() const
{
 if(_dirty)
 return _doCalculation();
 return _cache;
}

If you couldn't overload on const, then that wouldn't be possible. You'd be 
forced either to forgoe const and make it cache or to make it const and forgoe 
the caching.

- Jonathan M Davis


More information about the Digitalmars-d mailing list