| @safe unittest |
| { |
| import std.range.interfaces; |
| |
| import std.algorithm.iteration : map; |
| import std.range : iota; |
| |
| void useRange(InputRange!int range) { |
| // Function body. |
| } |
| |
| // Create a range type. |
| auto squares = map!"a * a"(iota(10)); |
| |
| // Wrap it in an interface. |
| auto squaresWrapped = inputRangeObject(squares); |
| |
| // Use it. |
| useRange(squaresWrapped); |
| } |
| |
| @safe unittest |
| { |
| import std.range.interfaces; |
| |
| import std.array; |
| auto app = appender!(uint[])(); |
| auto appWrapped = outputRangeObject!(uint, uint[])(app); |
| static assert(is(typeof(appWrapped) : OutputRange!(uint[]))); |
| static assert(is(typeof(appWrapped) : OutputRange!(uint))); |
| } |
| |