From: http://forum.dlang.org/post/cxgefmgjnzgoizrdtcbb@forum.dlang.org In following code, opDispatch call requires IFTI due to TemplateTupleParameter T deduction. However it unexpectedly disables UFCS. import std.conv, std.stdio, std.algorithm; struct S { void opDispatch(string s, T...)(T t) if (s.startsWith("foo")) { writeln(s); } } void main() { S s; s.foo(); // --> OK auto p = s.to!string(); // --> Error: s.opDispatch!("to") isn't a template }
https://github.com/D-Programming-Language/dmd/pull/2292
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/10ce85d0d9c661843ad8bd77c23f229bf5732ca1 fix Issue 10526 - opDispatch with IFTI should not disable UFCS When opDispatch result is a function template that requires IFTI, it would be kept on `DotTemplateInstanceExp` so `ti->needsTypeInference(sc)` returns TRUE in its semantic(). UFCS dispatch should check that the opDispatch result is really valid or not, by instantiating the function template. https://github.com/D-Programming-Language/dmd/commit/11d22d63ac22eb5980b6370f5f93a2a22e995e29 Merge pull request #2292 from 9rnsr/fix_ufcs Issue 10526 - opDispatch with IFTI should not disable UFCS