This patch also removes many other workarounds in the function (2562, 2564, 2569).
Note that the return type has been changed from char[] to string, but since this
function is intended for mixin(), it should not cause many trouble.
* Made emplace faster and replaced calls to it to also make them faster.
* Replaced phobos.d in posix.mak with index.d.
* Added version=StdDdoc to documentation build in posix.mak, and replaced uses of D_Ddoc with it.
* Improved documentation target in posix.mak (target dir automatically created).
* Added nice documentation table and cheat sheet at the top of std.algorithm.
* Replaced a few helper structs in std.range and std.algorithm with local structs, which simplify matters a fair amount.
* Added more constraints to functions in std.algorithm (still work in progress).
* Improved error message in std.algorithm.sort in case of failure to sort.
* std.random.dice(1, 10) now works (no need for array notation std.random.dice([1, 10])).
* Fixed documentation bugs and insufficiencies in std.range (still more to do).
* Improved speed of walkLength.
* Simplified retro.
* Simplified and optimized stride. Also folded stride(stride(r, a), b) into stride(r, a * b).
* Added roundRobin to std.range, which as a perk simplified radial.
* Added takeOne and takeNone to std.range.
* Added unsigned to std.traits.
- Tuple members are now accessible with the syntax a[0], a[1] etc.
- Eliminated an internal union (see bug 4421 and 4846). Re-implemented named members with alias.
- Worked around bug 4424. Got opAssign back.
- Made Tuple.slice!(from, to) to preserve field names if any.
- Added isTuple!(T) template.
- Removed the 'default constructor' that is never called.
- Changed Tuple.toString() to use formattedWrite() instead of the `static if (is(to!string...))` thingy.
The bug is not completely fixed. toDelegate() still does not work well with @safe function pointers... because toDelegate() is unsafe. And variadic arguments are ignored.
Thanks to pc for the patch!
std.algorithm.sort does assignments over input array, but Rebindable did not have opAssign overload for Rebindable itself. This change implements Rebindable.opAssign(Rebindable).