September 13, 2010 [Issue 4856] New: opDispatch does not work with specified template parameters | ||||
---|---|---|---|---|
| ||||
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 --- Comment #0 from Guillaume Benny <guillaume.benny@sympatico.ca> 2010-09-12 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: ------- |
September 15, 2010 [Issue 4856] opDispatch does not work with specified template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Guillaume Benny | 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 --- Comment #1 from Guillaume Benny <guillaume.benny@sympatico.ca> 2010-09-14 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: ------- |
Copyright © 1999-2021 by the D Language Foundation