Bug 10526 – opDispatch with IFTI should not disable UFCS

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-07-02T19:27:00Z
Last change time
2013-07-05T11:20:44Z
Keywords
pull, rejects-valid
Assigned to
nobody
Creator
k.hara.pg

Comments

Comment #0 by k.hara.pg — 2013-07-02T19:27:17Z
From: http://forum.dlang.org/post/[email protected] 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 }
Comment #1 by k.hara.pg — 2013-07-02T20:42:47Z
Comment #2 by github-bugzilla — 2013-07-05T11:20:31Z
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