digitalmars.D.bugs - Incorrect type signature matching?
- David Medlock (20/20) Oct 26 2004 alias bit delegate( in char[] , out uint ) f_type;
-
Carlos Santander B.
(38/38)
Oct 26 2004
"David Medlock"
escribió en el mensaje - David Medlock (2/45) Oct 27 2004 Thanks Carlos.
alias bit delegate( in char[] , out uint ) f_type; class A { f_type member; this( f_type f ) { member = f; } } bool myfunct( in char[] txt, out uint len ) { return false; } void main( char[][] arg ) { A var = new A( cast(f_type)myfunct ); A var = new A( myfunct ); } Why does this not compile? The type signatures appear to match. (it does not work using 'function' in place of delegate above either) I hope im not overlooking something obvious(thats what I get for programming at home after programming all day at work!)
Oct 26 2004
"David Medlock" <amedlock nospam.org> escribió en el mensaje news:clm8ei$3b1$1 digitaldaemon.com... | alias bit delegate( in char[] , out uint ) f_type; | | class A | { | f_type member; | this( f_type f ) { member = f; } | } | | | bool myfunct( in char[] txt, out uint len ) | { | return false; | } | | | void main( char[][] arg ) | { | A var = new A( cast(f_type)myfunct ); | A var = new A( myfunct ); | } | | Why does this not compile? | The type signatures appear to match. | (it does not work using 'function' in place of delegate above either) | | I hope im not overlooking something obvious(thats what I get for | programming at home after programming all day at work!) This is not a bug. There're 2 things here: first, you need to use new A( & myfunct ). Notice the "&". No cast either. Second, a delegate is a function with an enclosing frame (or something like that). Anyway, myfunct should be, a) a nested function, or b) a non-static member function. Either way, your code will work. To make it work as it is right now, change f_type to be function instead of delegate, and don't forget the "&". ----------------------- Carlos Santander Bernal
Oct 26 2004
Carlos Santander B. wrote:"David Medlock" <amedlock nospam.org> escribió en el mensaje news:clm8ei$3b1$1 digitaldaemon.com... | alias bit delegate( in char[] , out uint ) f_type; | | class A | { | f_type member; | this( f_type f ) { member = f; } | } | | | bool myfunct( in char[] txt, out uint len ) | { | return false; | } | | | void main( char[][] arg ) | { | A var = new A( cast(f_type)myfunct ); | A var = new A( myfunct ); | } | | Why does this not compile? | The type signatures appear to match. | (it does not work using 'function' in place of delegate above either) | | I hope im not overlooking something obvious(thats what I get for | programming at home after programming all day at work!) This is not a bug. There're 2 things here: first, you need to use new A( & myfunct ). Notice the "&". No cast either. Second, a delegate is a function with an enclosing frame (or something like that). Anyway, myfunct should be, a) a nested function, or b) a non-static member function. Either way, your code will work. To make it work as it is right now, change f_type to be function instead of delegate, and don't forget the "&". ----------------------- Carlos Santander BernalThanks Carlos.
Oct 27 2004