digitalmars.D.learn - Accepting delegates/functions in templates
- =?UTF-8?B?Ikx1w61z?= Marques" (31/31) May 27 2013 I'm trying to accept delegates or functions in a templated method.
 - =?UTF-8?B?QWxpIMOHZWhyZWxp?= (8/27) May 27 2013 It is a red herring. The code fails to compile even without isSomeFuncti...
 
I'm trying to accept delegates or functions in a templated method.
My first try using "isDelegate!dg || isFunctionPointer!dg" did 
not work because isDelegate fails, although I'm not sure I 
understand exactly why:
     void main()
     {
         int x;
         static assert(isDelegate!(() { x = 4; }));
         // Error: static assert ... is false
     }
If I changed that example to use isSomeFunction it works 
correctly. But when I tried to use isSomeFunction in the proper 
context it fails to compile:
     class A
     {
         void foo(alias dg)()
             if(isSomeFunction!dg)
         {
         }
     }
     void main()
     {
         int x;
         A a = new A;
         a.foo!((int param) { x = 4;});
         // error: cannot use local '__lambda1' as parameter to 
non-global
                       template foo(alias dg)() if 
(isSomeFunction!(dg))
     }
Can anyone help me understand this?
 May 27 2013
On 05/27/2013 07:05 AM, "Luís Marques" <luismarques gmail.com>" wrote:If I changed that example to use isSomeFunction it works correctly. But when I tried to use isSomeFunction in the proper context it fails to compile:It is a red herring. The code fails to compile even without isSomeFunction. import std.traits;class A { void foo(alias dg)() if(isSomeFunction!dg) { } } void main() { int x; A a = new A; a.foo!((int param) { x = 4;}); // error: cannot use local '__lambda1' as parameter tonon-globaltemplate foo(alias dg)() if (isSomeFunction!(dg)) } Can anyone help me understand this?It is an unsolved technical issue about delegates' currently not having sufficient number of context pointers: http://d.puremagic.com/issues/show_bug.cgi?id=5710 Ali
 May 27 2013








 
 
 
 =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com>