Function std.exception.handle
Handle exceptions thrown from range primitives.
						
				auto handle(E, RangePrimitive primitivesToHandle, alias handler, Range)
				(
				
				  Range input
				
				)
				
				if (isInputRange!Range);
						
					
				Use the RangePrimitive enum to specify which primitives to handle.
Multiple range primitives can be handled at once by using the OR operator
or the pseudo-primitives RangePrimitive and RangePrimitive.
All handled primitives must have return types or values compatible with the
user-supplied handler.
Parameters
| Name | Description | 
|---|---|
| E |  The type of Throwable to handle. | 
| primitivesToHandle | Set of range primitives to handle. | 
| handler |  The callable that is called when a handled primitive throws a
    Throwable of type E. The handler must accept arguments of
    the form E, ref IRange and its return value is used as the primitive's
    return value whenever E is thrown. For opIndex, the handler can
    optionally recieve a third argument; the index that caused the exception. | 
| input | The range to handle. | 
Returns
A wrapper struct that preserves the range interface of input.
Note
Infinite ranges with slicing support must return an instance of
std when sliced with a specific lower and upper
bound (see hasSlicing); handle deals with
this by takeing 0 from the return value of the handler function and
returning that when an exception is caught.
Example
import std .algorithm .comparison : equal;
import std .algorithm .iteration : map, splitter;
import std .conv : to, ConvException;
auto s = "12,1337z32,54,2,7,9,1z,6,8";
// The next line composition will throw when iterated
// as some elements of the input do not convert to integer
auto r = s .splitter(',') .map!(a => to!int(a));
// Substitute 0 for cases of ConvException
auto h = r .handle!(ConvException, RangePrimitive .front, (e, r) => 0);
assert(h .equal([12, 0, 54, 2, 7, 9, 0, 6, 8]));
Example
import std .algorithm .comparison : equal;
import std .range : retro;
import std .utf : UTFException;
auto str = "hello\xFFworld"; // 0xFF is an invalid UTF-8 code unit
auto handled = str .handle!(UTFException, RangePrimitive .access,
        (e, r) => ' '); // Replace invalid code points with spaces
assert(handled .equal("hello world")); // `front` is handled,
assert(handled .retro .equal("dlrow olleh")); // as well as `back`