On Friday, 23 October 2015 at 11:03:37 UTC, Andrei Alexandrescu wrote:
On 10/22/15 1:09 AM, deadalnix wrote:
The elephant in the room: make the template parameter's type qualifier
transitive with the collection's qualifier.

Could you please give more detail on this? Thanks! -- Andrei

Sure. We have a problem when it come to collection in the fact that type qualifier do not turtle down as one would expect.

Collection!T and Collection!const(T) are 2 completely different types. There is a good reason for this : static if (is(T == const)) { ... } . As a result thing like :

void foo(T)(const Collection!const(T) c) {}
void main() {
  Collection!T c;
  foo(c); // Error, GTFO !
}

With the different qualifiers and implicit conversion, thing become quite tricky. You can simulate them partially with a set of carefully crafted alias this (but not having multiple alias this doesn't make things any simpler) but there is the monster of mutually recursive template instanciation that is lurking.

As far as i know, jmdavis had some good work done on this, but it was far from perfect.

Reply via email to