| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail11125.d(26): Error: template instance `fail11125.filter!(function (int a) pure nothrow @nogc @safe => a + 1)` does not match template declaration `filter(alias predfun)` |
| with `predfun = __lambda1` |
| must satisfy the following constraint: |
| ` is(ReturnType!predfun == bool)` |
| fail_compilation/fail11125.d(27): Error: template instance `fail11125.filter!(function (int a) pure nothrow @nogc @safe => a + 1)` does not match template declaration `filter(alias predfun)` |
| with `predfun = __lambda2` |
| must satisfy the following constraint: |
| ` is(ReturnType!predfun == bool)` |
| --- |
| */ |
| |
| template ReturnType(alias fun) { alias int ReturnType; } |
| |
| template filter(alias predfun) |
| if (is(ReturnType!predfun == bool)) |
| { |
| static assert(is(ReturnType!predfun == bool)); |
| auto filter(Range)(Range r) { } |
| } |
| |
| void main() |
| { |
| filter!((int a) => a + 1)([1]); // fails in constraint |
| [1].filter!((int a) => a + 1); // fails internally in static assert! |
| } |