| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail12378.d(18): Error: undefined identifier `ANYTHING` |
| fail_compilation/fail12378.d(18): Error: undefined identifier `GOES` |
| fail_compilation/fail12378.d(91): instantiated from here: `MapResultS!((x0) => ANYTHING - GOES, Result)` |
| fail_compilation/fail12378.d(17): instantiated from here: `mapS!(Result)` |
| fail_compilation/fail12378.d(100): instantiated from here: `__lambda1!int` |
| fail_compilation/fail12378.d(91): instantiated from here: `MapResultS!((y0) => iota(2).mapS!((x0) => ANYTHING - GOES), Result)` |
| fail_compilation/fail12378.d(16): instantiated from here: `mapS!(Result)` |
| --- |
| */ |
| void testS() |
| { |
| auto r = |
| iota(1).mapS!(y0 => |
| iota(2).mapS!(x0 => |
| ANYTHING-GOES |
| ) |
| ); |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail12378.d(40): Error: undefined identifier `ANYTHING` |
| fail_compilation/fail12378.d(40): Error: undefined identifier `GOES` |
| fail_compilation/fail12378.d(112): instantiated from here: `MapResultC!((x0) => ANYTHING - GOES, Result)` |
| fail_compilation/fail12378.d(39): instantiated from here: `mapC!(Result)` |
| fail_compilation/fail12378.d(123): instantiated from here: `__lambda1!int` |
| fail_compilation/fail12378.d(112): instantiated from here: `MapResultC!((y0) => iota(2).mapC!((x0) => ANYTHING - GOES), Result)` |
| fail_compilation/fail12378.d(38): instantiated from here: `mapC!(Result)` |
| --- |
| */ |
| void testC() |
| { |
| auto r = |
| iota(1).mapC!(y0 => |
| iota(2).mapC!(x0 => |
| ANYTHING-GOES |
| ) |
| ); |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail12378.d(64): Error: undefined identifier `ANYTHING` |
| fail_compilation/fail12378.d(64): Error: undefined identifier `GOES` |
| fail_compilation/fail12378.d(135): instantiated from here: `MapResultI!((x0) => ANYTHING - GOES, Result)` |
| fail_compilation/fail12378.d(63): instantiated from here: `mapI!(Result)` |
| fail_compilation/fail12378.d(143): instantiated from here: `__lambda1!int` |
| fail_compilation/fail12378.d(135): instantiated from here: `MapResultI!((y0) => iota(2).mapI!((x0) => ANYTHING - GOES), Result)` |
| fail_compilation/fail12378.d(62): instantiated from here: `mapI!(Result)` |
| --- |
| */ |
| |
| |
| void testI() |
| { |
| auto r = |
| iota(1).mapI!(y0 => |
| iota(2).mapI!(x0 => |
| ANYTHING-GOES |
| ) |
| ); |
| } |
| |
| auto iota(E)(E end) |
| { |
| alias Value = E; |
| |
| static struct Result |
| { |
| private Value current, pastLast; |
| |
| @property inout(Value) front() inout { return current; } |
| } |
| |
| return Result(0, end); |
| } |
| |
| template mapS(fun...) |
| { |
| auto mapS(R)(R r) |
| { |
| alias AppliedReturnType(alias f) = typeof(f(r.front)); |
| static assert(!is(AppliedReturnType!fun == void), |
| "Mapping function must not return void."); |
| |
| return MapResultS!(fun, R)(r); |
| } |
| } |
| struct MapResultS(alias fun, R) |
| { |
| R _input; |
| |
| @property auto ref front() |
| { |
| return fun(_input.front); |
| } |
| } |
| |
| template mapC(fun...) |
| { |
| auto mapC(R)(R r) |
| { |
| alias AppliedReturnType(alias f) = typeof(f(r.front)); |
| static assert(!is(AppliedReturnType!fun == void), |
| "Mapping function must not return void."); |
| |
| return new MapResultC!(fun, R)(r); |
| } |
| } |
| class MapResultC(alias fun, R) |
| { |
| R _input; |
| |
| this(R r) { _input = r; } |
| |
| @property auto ref front() |
| { |
| return fun(_input.front); |
| } |
| } |
| |
| template mapI(fun...) |
| { |
| auto mapI(R)(R r) |
| { |
| alias AppliedReturnType(alias f) = typeof(f(r.front)); |
| static assert(!is(AppliedReturnType!fun == void), |
| "Mapping function must not return void."); |
| |
| return MapResultI!(fun, R).init; |
| } |
| } |
| interface MapResultI(alias fun, R) |
| { |
| static @property auto ref front() |
| { |
| R _input; |
| return fun(_input.front); |
| } |
| } |