digitalmars.D.bugs - [Issue 4856] New: opDispatch does not work with specified template parameters
- d-bugmail puremagic.com (57/57) Sep 12 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4856
- d-bugmail puremagic.com (28/28) Sep 14 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4856
http://d.puremagic.com/issues/show_bug.cgi?id=4856 Summary: opDispatch does not work with specified template parameters Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: guillaume.benny sympatico.ca 18:09:06 PDT --- opDispatch does accept additional template parameters but they cannot be specified: ==== module test.d; import std.stdio; struct DispatchTest { void opDispatch(string name, string otherName)() { writeln(name, ":", otherName); } } void main() { DispatchTest t; //t.testName!("testOtherName")(); t.opDispatch!("testName", "testOtherName")(); } ==== This compiles fine but if I remove the commented line, dmd (v2.048) tells me: test.d(13): Error: template instance opDispatch!("testName") does not match template declaration opDispatch(string name,string otherName) The error seems OK for a "normal" function, but for opDispatch, it seems limiting to me: the first call should translate to the second. Here's an other, similar, test: ==== module test.d; import std.stdio; struct DispatchTest { void opDispatch(string name, T)(T t) { writeln(name, ":", T.stringof); } } void main() { DispatchTest t; //t.testName!(DispatchTest)(t); t.testName(t); } ==== Which gives, when uncommenting: test.d(13): Error: template instance opDispatch!("testName") does not match template declaration opDispatch(string name,T). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 12 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4856 Guillaume Benny <guillaume.benny sympatico.ca> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID 17:44:47 PDT --- Simen Kjaeraas found a solution: http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=117353 === The correct way to do what you want is this: module foo; import std.stdio; struct test { template opDispatch( string name ) { void opDispatch( string other )( ) { writeln( name, ", ", other ); } } } void main( ) { test t; t.foo!( "Hey!" )( ); } === -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 14 2010