As createNode was taking a value by ref, Dlist.insertFront could not be
called with a range with a non-ref front.
Fix by taking the value as `auto ref` instead of just `ref`.
Resolves#15263.
- All insert methods should take `auto ref T t`
instead of `Stuff t`, because the latter is
an unnecessary temporary if `Stuff` isn't `T`.
- Small, copyable, register sized Ts should always be
passed by-value instead of auto ref.
...element returns non-empty range.
The main issue is that DList.Range is implemented in terms of "first and last" as opposed to "first and past last", which means you have to special-case empty ranges. The fix is to do the same thing as in `opSlice`, and to explicitly initialize a null Range when it is empty.
Turn std.container into a package.
Delete container.d
Remove totalcontainer from package.
Create std.container.util.d and reference it from other containers.
Correct code coverage for containers.
Add containers for unit testing.
Make std.container.util public from any module.
Move around imports (avoid version(unittest)).
Remove irrelevant unittests.