http://d.puremagic.com/issues/show_bug.cgi?id=7802
Summary: UFCS functions get lost when type is transmitted to
template
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: [email protected]
ReportedBy: [email protected]
--- Comment #0 from Walter Bright <[email protected]> 2012-03-30
23:10:11 PDT ---
a.d
-------------
void foo(T)(T t) {
t.func();
}
-------------
test.d
-------------
class C { }
void func(C c) { }
void test(C c) {
foo(c);
-------------
This fails to compile because a.d doesn't know about test.func(C c), and so
does not find it when attempting to resolve t.func() using UFCS.
The solution is to:
If func() is not found as a member function of t, then look in the template
instantiation scope for a func(t). If found, use that as the UFCS function, and
then mark the template instantiation as LOCAL to the instantiation context.
This will ensure that the mangled name of the instantiation will not conflict
with other instantiations of foo(T) with other func(T) functions.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------