Should this work?

Jacob Carlborg doob at me.com
Sat Jan 30 06:45:03 PST 2010


On 1/30/10 14:47, bobef wrote:
> Jacob Carlborg Wrote:
>
>> On 1/30/10 14:06, bobef wrote:
>>> I get these errors DMD 1.055:
>>>
>>> (void(char[] _param_0))()
>>> bug.d(2): Error: expected 1 function arguments, not 0
>>> (void(char[] _param_0))()
>>> bug.d(15): Error: template instance bug.Foo!(a) error instantiating
>>>
>>> //code----------------------------------------------------------------------------------------------
>>>
>>> void Foo(alias X)() {
>>> 	pragma(msg,typeof(X).stringof);
>>> }
>>>
>>> class A {
>>> 	void a(char[]) {
>>> 	}
>>>
>>> 	void b() {
>>> 	}
>>> }
>>>
>>> void main() {
>>>
>>> 	Foo!(A.a)(); //doesnt work
>>> 	Foo!(A.b)(); //works
>>>
>>> }
>>>
>>> //end of code ----------------------------------------------------------------------
>>
>> Since "a" is a method and when you do "typeof(X)" it tries to call the
>> method but since it takes one parameter it fails. "b" doesn't fail
>> because it doesn't take any parameters. This is all because of the
>> optional parentheses in function calls. Change to: "typeof(&X)".
>
>
> This is not true. You can't call neither A.a nor A.b because A is a class, not an instance of a class - there is no this. Maybe I should file a bug.

That's true, but you can still try to call it.

void main ()
{
	A.a;
}

The above results in:
Error: function A.a (char[]) does not match parameter types ()
Error: expected 1 function arguments, not 0

When I add the correct argument I get this result:
Error: need 'this' to access member a

Apparently it tries to match the arguments before it checks if "this" is 
available.


More information about the Digitalmars-d-learn mailing list