What is the appropriate way to create a variable for the range returned by RedBlackTree lowerBound and upperBound. For example, given this code:

```
RedBlackTree!long promptPosition = redBlackTree!long();

long row = to!long(vte.getVadjustment().getValue());
RBRange!(RBNode!long*) range;
if (direction < 0) {
    range = promptPosition.lowerBound(row);
    if (range.empty) result = lower;
    else result = range.back;
} else {
    range = promptPosition.upperBound(row);
    if (range.empty) result = upper;
    else result = range.front();
}
if (result >= lower) {
    vte.getVadjustment.setValue(to!double(result));
} else {
    promptPosition.remove(range);
}
```

The second line where I declare the range variable as RBRange!(RBNode!long*) the compiler complains with the following warning:

Deprecation: std.container.rbtree.RBRange(N) is not visible from module terminal

Which makes sense since RBRange is a private struct. However I cannot use the normal range interfaces here either (ForwardRange, BiDirectionalRange, etc) since it complains about RBRange not being able to cast to them.

Reply via email to