dynamic classes and duck typing

Simen kjaeraas simen.kjaras at gmail.com
Mon Nov 30 14:14:18 PST 2009


On Mon, 30 Nov 2009 23:13:23 +0100, Pelle Månsson  
<pelle.mansson at gmail.com> wrote:

> Walter Bright wrote:
>> Bill Baxter wrote:
>>> On Mon, Nov 30, 2009 at 1:00 PM, Walter Bright
>>>>    void opDispatch(string name, T...)(T values...)
>>>>                                               ^^^
>>>
>>> You didn't use to have to do that with variadic templates.  Is that
>>> also a new change in SVN?
>>  I believe it was always like that.
>>
> What do you mean? Not the D I played with?
>
> void test1(T...)(T ts) {
>      writeln(ts); //works as expected
> }
> void test2(string s, T...)(T ts) {
>      writeln(s);  // requires manual specifying of each type
>      writeln(ts); // e.g. test2!("foo", int, int)(1,2)
> }
> void test3(string s, T...)(T ts...) {
>      writeln(s);  // silently dies when called with
>      writeln(ts); // test3!("foo")(1,2,3,4) in v2.034
> }

It would seem Walter is right, but only for opDispatch. This compiles
fine. If you want compile errors, move the ellipsis around:


struct foo {
	void opDispatch( string name, T... )( T value... ) {
	}
	
	void bar( T... )( T args ) {
	}
}

void main( ) {
	foo f;
	f.bar( 3 );
	f.baz( 3.14 );
}

-- 
Simen



More information about the Digitalmars-d mailing list