On 2/14/2017 8:25 AM, Andrei Alexandrescu wrote:
Range remove
(SwapStrategy s = SwapStrategy.stable, Range, Offset...)
(Range range, Offset offset)
if (s != SwapStrategy.stable
&& isBidirectionalRange!Range
&& hasLvalueElements!Range
&& hasLength!Range
&& Offset.length >= 1);
The function name is on the first line.
It could be improved slightly using indentation:
Range remove
(SwapStrategy s = SwapStrategy.stable, Range, Offset...)
(Range range, Offset offset)
if (s != SwapStrategy.stable
&& isBidirectionalRange!Range
&& hasLvalueElements!Range
&& hasLength!Range
&& Offset.length >= 1);
But there's another issue here. remove() has other overloads:
Range remove
(SwapStrategy s = SwapStrategy.stable, Range, Offset...)
(Range range, Offset offset)
if (s == SwapStrategy.stable
&& isBidirectionalRange!Range
&& hasLvalueElements!Range
&& Offset.length >= 1)
Range remove(alias pred, SwapStrategy s = SwapStrategy.stable, Range)
(Range range)
if (isBidirectionalRange!Range
&& hasLvalueElements!Range)
Two constraints are common to all three, those are the only ones that actually
need to be in the constraint. The others can go in the body under `static if`,
as the user need not be concerned with them.
This is a general issue in Phobos that too many constraints are user-facing when
they don't need to be.
A further improvement in the documentation would be to add links to
isBidirectionalRange and hasLvalueElements.