Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
November 05, 2007 [Issue 1641] New: Template function arg deduction gets confused when used with the inner name trick | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1641 Summary: Template function arg deduction gets confused when used with the inner name trick Product: D Version: 2.007 Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: andrei@metalanguage.com The use case is simple: template foo(T) { void foo(U)(U a, T b, T c) { } } void main() { int x; foo!(uint)(x, 0, 1); } The template engine should properly bind 0 and 1 to type uint, but it fails to do so. As a result, the entire program does not compile although it should. -- |
November 05, 2007 [Issue 1641] Template function arg deduction gets confused when used with the inner name trick | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1641 shro8822@vandals.uidaho.edu changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |shro8822@vandals.uidaho.edu ------- Comment #1 from shro8822@vandals.uidaho.edu 2007-11-05 16:21 ------- If you convert the call to: foo!(uint)(x, 0u, 1u); or foo!(int)(x, 0, 1); it works. This might indicate that type conversion is not working correctly here. Either way it gives a work around to any one who just need to get something done. -- |
November 11, 2007 [Issue 1641] Template function arg deduction gets confused when used with implicit conversions | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1641 smjg@iname.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |smjg@iname.com Keywords| |rejects-valid Summary|Template function arg |Template function arg |deduction gets confused when|deduction gets confused when |used with the inner name |used with implicit |trick |conversions ------- Comment #2 from smjg@iname.com 2007-11-11 10:53 ------- No nested template is required - this is sufficient to show the problem (DMD 1.023 and 2.007, Windows): ---------- void foo(U)(U a, uint b, uint c) { } void main() { int x; foo(x, 0, 1); } ---------- bz1641a.d(6): template bz1641a.foo(U) does not match any template declaration bz1641a.d(6): template bz1641a.foo(U) cannot deduce template function from argument types (int,int,int) ---------- So the problem is that, when trying to perform IFTI, it doesn't look for implicit conversions. -- |
October 21, 2011 [Issue 1641] Template function arg deduction gets confused when used with implicit conversions | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1641 Kenji Hara <k.hara.pg@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #3 from Kenji Hara <k.hara.pg@gmail.com> 2011-10-21 03:48:51 PDT --- With git master (1ff6ad8509), the sample codes compile without error. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation