blob: 76452f462dcbb0d1d3a877f69597cf776df0fbe7 [file] [log] [blame]
// REQUIRED_ARGS: -o-
// PERMUTE_ARGS:
void main() pure
{
int[] foo;
// if indirectly instantiated aggregate is struct (== MapResultS)
foo.map!(MapResultS, x => foo.map!(MapResultS, y => x).array);
// if indirectly instantiated aggregate is class (== MapResultC)
foo.map!(MapResultC, x => foo.map!(MapResultC, y => x).array);
}
T array(T)(T a)
{
static int g; g = 1; // impure operation
return a;
}
template map(alias MapResult, fun...)
{
auto map(Range)(Range r)
{
alias AppliedReturnType(alias f) = typeof(f(r[0]));
static assert(!is(AppliedReturnType!fun == void));
return MapResult!(fun).init;
}
}
struct MapResultS(alias fun)
{
@property front()
{
return fun(1);
}
}
class MapResultC(alias fun)
{
@property front()
{
return fun(1);
}
}