On Thursday, 22 October 2015 at 17:13:48 UTC, Jonathan M Davis wrote:
On Thursday, 22 October 2015 at 16:29:19 UTC, bitwise wrote:
Maybe look at the code next time before you LOL......

My point would be the same regardless. Range!(const T) and const(Range!T) - and Container!(const T) and const(Container!T) - have no relation as far as the compiler is concerned, and that makes dealing with const correctly a royal pain - particularly if you want a range to act like an array like it's supposed to be able to do (at least insofar as they have the same operations). You asked what deadalnix meant by

The elephant in the room: make the template parameter's type qualifier transitive
with the collection's qualifier.

and I tried to explain.

- Jonathan M Davis

I'm not even sure you're talking about the same thing as deadalnix, and I think I have already done what he's asking.

example:
  List!int a = [1, 2];
  writeln( typeof(a[]).stringof );
  writeln( typeof(a[].front).stringof );
  writeln( is(typeof({ a[].popFront(); })).stringof );

  const(List!int) b = [1, 2];
  writeln( typeof(b[]).stringof );
  writeln( typeof(b[].front).stringof );
  writeln( is(typeof({ b[].popFront(); })).stringof );

output:
  Range!(ListBase!int)
  int
  true
  Range!(const(ListBase!int))
  const(int)
  true


Of course, neither of the following are possible because of the design of D's const.

import std.container;
Array!(const(int)) a;

import collections;
List!(const(int)) b;

Both will produce compilation errors.

    Bit




Reply via email to