mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
51 lines
1,007 B
D
51 lines
1,007 B
D
/*
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/ice12174.d(12): Error: no property `sum` for `[1, 2, 3]` of type `int[]`
|
|
fail_compilation/ice12174.d(20): Error: CTFE failed because of previous errors in `this`
|
|
fail_compilation/ice12174.d(13): called from here: `filter([1, 2, 3])`
|
|
---
|
|
*/
|
|
|
|
void main()
|
|
{
|
|
enum foo3 = (int n) => [1,2,3].sum;
|
|
enum bar3 = [1,2,3].filter!(n => n % foo3(n) == 0);
|
|
}
|
|
|
|
template filter(alias pred)
|
|
{
|
|
auto filter(Range)(Range rs)
|
|
{
|
|
return FilterResult!(pred, Range)(rs);
|
|
}
|
|
}
|
|
|
|
private struct FilterResult(alias pred, R)
|
|
{
|
|
R _input;
|
|
|
|
this(R r)
|
|
{
|
|
_input = r;
|
|
while (_input.length && !pred(_input[0]))
|
|
{
|
|
_input = _input[1..$];
|
|
}
|
|
}
|
|
|
|
@property bool empty() { return _input.length == 0; }
|
|
|
|
@property auto ref front()
|
|
{
|
|
return _input[0];
|
|
}
|
|
|
|
void popFront()
|
|
{
|
|
do
|
|
{
|
|
_input = _input[1..$];
|
|
} while (_input.length && !pred(_input[0]));
|
|
}
|
|
}
|