Should this work?

bobef aasd.aasdasd.asd.ad.ad.as.d.a at asdasdas.das.da.d.ad.sa.d
Sat Jan 30 07:27:23 PST 2010


Jacob Carlborg Wrote:

> 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.

I am not sure it should try to call anything. If it did A.b would fail because of no this. So I guess nothing is actually called. Anyway it is a bug, I filed it :)


More information about the Digitalmars-d-learn mailing list