[Bug 170] New: Template functions in templates missing member symbols
via D.gnu
d.gnu at puremagic.com
Fri Jan 2 19:05:23 PST 2015
http://bugzilla.gdcproject.org/show_bug.cgi?id=170
Bug ID: 170
Summary: Template functions in templates missing member symbols
Product: GDC
Version: 4.8.x
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: Normal
Component: gdc
Assignee: ibuclaw at gdcproject.org
Reporter: obscurans at gmail.com
Template functions in a template scope aren't inferring instantiations
correctly. This is a bit hard to explain so here's a MWE:
---file1
module foobar;
class bar(T) {
void undefined_reference() {}
}
template foo(T) {
bar!T foo1(T2)() if (true) body { return null; }
bar!T foo2(T2)() { return null; }
bar!T foo3(T2 = void)() if (true) body { return null; }
bar!T foo4(T2 = void)() { return null; }
void foo5(T2)(bar!T x) if (true) body {}
void foo6(T2)(bar!T x) {}
void foo7(T2 = void)(bar!T x) if (true) body {}
void foo8(T2 = void)(bar!T x) {}
}
---end
---file2
import foobar;
void main() {
foo!void.foo1!void(); // succeeds
foo!void.foo2!void(); // succeeds
foo!void.foo3(); // succeeds
foo!void.foo3!void(); // succeeds
foo!void.foo4(); // succeeds
foo!void.foo4!void(); // succeeds
// foo!void.foo5!void(null); // fails!
foo!void.foo6!void(null); // succeeds
foo!void.foo7(null); // succeeds
// foo!void.foo7!void(null); // fails!
foo!void.foo8(null); // succeeds
foo!void.foo8!void(null); // succeeds
}
---end
Uncomment the failing lines, and I get (on 4.8.2) a linker error missing void
foobar.bar!(void).bar.undefined_reference().
If they are in the same file nothing fails. For parameters only, it fails only
if both a template argument was given and a template constraint exists.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/d.gnu/attachments/20150103/c7d4bbdb/attachment.html>
More information about the D.gnu
mailing list