Thread overview
.stringof might call function?
Mar 16, 2013
simendsjo
Mar 16, 2013
simendsjo
Mar 16, 2013
Andrej Mitrovic
March 16, 2013
Why is the function called in the template at the line of .stringof?

template t(alias fn) {
    static if(fn.stringof) // f(int i) isn't callable using ()
        enum t = true;
    else
        enum t = false;
}

void main() {
    void f(int i) {}
    t!f;
}
March 16, 2013
On Saturday, 16 March 2013 at 13:01:44 UTC, simendsjo wrote:
> Why is the function called in the template at the line of .stringof?
>
> template t(alias fn) {
>     static if(fn.stringof) // f(int i) isn't callable using ()
>         enum t = true;
>     else
>         enum t = false;
> }
>
> void main() {
>     void f(int i) {}
>     t!f;
> }

Seems pragma(msg, fn) also has the same behavior.
Guess this is because all functions can be called using property syntax. It really hurts my generic code though..
March 16, 2013
On 3/16/13, simendsjo <simendsjo@gmail.com> wrote:
> Why is the function called in the template at the line of .stringof?
>
> template t(alias fn) {
>      static if(fn.stringof) // f(int i) isn't callable using ()

Use __traits(identifier, fn).