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.