Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
April 02, 2008 Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
After an 1+ hours long bug hunt, I have reduced my code to the following one. ReturnType below is a reduced version of std.traits.ReturnType: template ReturnType(T) { static if (is(T R == return)) alias R ReturnType; } void bar(T)(T f) { return f(); } void main() { alias ReturnType!( typeof( (int x){ return x; } ) ) TInt; //problem bar((int n=1) { return 2; }); } The output: test.d(6): Error: expected 1 arguments, not 0 test.d(10): template instance test.bar!(int delegate(int x)) error instantiating Is this a bug of DMD/Phobos (I am using 1.028)? Bye, bearophile |
April 03, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | "bearophile" <bearophileHUGS@lycos.com> wrote in message news:ft14od$22lv$1@digitalmars.com... > After an 1+ hours long bug hunt, I have reduced my code to the following > one. > ReturnType below is a reduced version of std.traits.ReturnType: > > template ReturnType(T) { > static if (is(T R == return)) > alias R ReturnType; > } > > void bar(T)(T f) { return f(); } > > void main() { > alias ReturnType!( typeof( (int x){ return x; } ) ) TInt; //problem > bar((int n=1) { return 2; }); > } > > The output: > test.d(6): Error: expected 1 arguments, not 0 > test.d(10): template instance test.bar!(int delegate(int x)) error > instantiating > > Is this a bug of DMD/Phobos (I am using 1.028)? > > Bye, > bearophile How bizarre... I just tried your code and it would appear that somehow the presence of the alias/ReturnType call causes the default parameter value in the subsequent line to be seemingly ignored... Passing a parameter to the call to f() in bar, eliminating the alias line and removing the parameter from the delegate passed to bar all eliminate the error. I don't see how this could be anything other than a very unusual compiler bug. Happy bug reporting =) |
April 04, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile wrote: > After an 1+ hours long bug hunt, I have reduced my code to the following one. > ReturnType below is a reduced version of std.traits.ReturnType: > > template ReturnType(T) { > static if (is(T R == return)) > alias R ReturnType; > } > > void bar(T)(T f) { return f(); } There is no return type. alias Return is returning an int. > > void main() { > alias ReturnType!( typeof( (int x){ return x; } ) ) TInt; //problem > bar((int n=1) { return 2; }); > } > > The output: > test.d(6): Error: expected 1 arguments, not 0 > test.d(10): template instance test.bar!(int delegate(int x)) error instantiating > > Is this a bug of DMD/Phobos (I am using 1.028)? > > Bye, > bearophile |
April 04, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to janderson | janderson:
> There is no return type. alias Return is returning an int.
I know, that code isn't the minimal yet, but even if you replace bar with:
void bar(T)(T f) { f(); }
The situation doesn't change.
Bye,
bearophile
|
April 04, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile wrote:
> janderson:
>> There is no return type. alias Return is returning an int.
>
> I know, that code isn't the minimal yet, but even if you replace bar with:
>
> void bar(T)(T f) { f(); }
>
> The situation doesn't change.
>
> Bye,
> bearophile
My bad. It does look like a compiler deficiency.
-Joel
|
April 04, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile wrote: > After an 1+ hours long bug hunt, I have reduced my code to the following one. > ReturnType below is a reduced version of std.traits.ReturnType: > > template ReturnType(T) { > static if (is(T R == return)) > alias R ReturnType; > } > > void bar(T)(T f) { return f(); } > > void main() { > alias ReturnType!( typeof( (int x){ return x; } ) ) TInt; //problem > bar((int n=1) { return 2; }); > } > > The output: > test.d(6): Error: expected 1 arguments, not 0 > test.d(10): template instance test.bar!(int delegate(int x)) error instantiating > > Is this a bug of DMD/Phobos (I am using 1.028)? > > Bye, > bearophile Delegates can't have default arguments. -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org |
April 05, 2008 Re: Problem with ReturnType | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kirk McDonald | Kirk McDonald:
> Delegates can't have default arguments.
I don't understand much. I think what you say isn't enough to justify that error, you may comment out some of those lines of code to see the results. But maybe I just don't understand you.
Bye and sorry,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation