https://issues.dlang.org/show_bug.cgi?id=16481
--- Comment #1 from John Colvin <[email protected]> --- Reduced version without phobos imports: void blah() { int[] a; a.map!(x => x.map!to); } template to() { } template map(fun...) { auto map(Range)(Range r) { alias RE = Range; alias _fun = unaryFun!fun; assert(!is(typeof(_fun(RE.init)))); MapResult!(_fun, Range)(r); } } struct MapResult(alias fun, Range) { alias R = Range; R _input; this(R) { } @property front() { fun(_input); } } template unaryFun(alias fun) { alias unaryFun = fun; } Undefined symbols for architecture x86_64: "_D3mod26__T9MapResultS73mod2toTAiZ9MapResult6__ctorMFNaNbNcNiNfAiZS3mod26__T9MapResultS73mod2toTAiZ9MapResult", referenced from: _D3mod17__T3mapS73mod2toZ11__T3mapTAiZ3mapFNaNbNiNfAiZv in mod.o If you comment out the assert then you get this error instead: mod.d(34): Error: template mod.to cannot deduce function from argument types !()(int[]), candidates are: mod.d(8): mod.to() mod.d(19): Error: template instance mod.MapResult!(to, int[]) error instantiating mod.d(5): instantiated from here: map!(int[]) mod.d(34): instantiated from here: __lambda1!(int[]) mod.d(19): instantiated from here: MapResult!(__lambda1, int[]) mod.d(5): instantiated from here: map!(int[]) which is what I expect and looks ok. --
