On 09/10/13 17:50, Daniel Davidson wrote:
Take, for example, LinearCongruentialEngine from random.d. It has a function:

     bool opEquals(ref const LinearCongruentialEngine rhs) const

Why is it using const here instead of immutable?

Among other things, because no LinearCongruentialEngine will ever, ever be immutable -- because it won't work if it's immutable. Whereas ref const I believe is simply saying, "You can't mutate it via this reference." I'm not sure if it ought technically to be auto ref const.

In any case, I think the general reason is in order to be agnostic about type qualifications. Try:

    BigInt a = BigInt(5);
    immutable BigInt b = immutable(BigInt)(5);
    writeln(a.opEquals(b));

... which works.  BigInt.opEquals takes input by an auto ref const.

Reply via email to