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?

Reply via email to