let is(CTFE == x) mean that x is a compile time constant. CTFE(x) converts a x to this compile time constant. Passing any compile time constant essentially turns the variable in to a compile time constant(effectively turns it in to a template with template parameter)

void foo(size_t i)
{
    static if (is(CTFE == i))
    {
         pragma(msg, CTFE(i));
    } else
    {
        writeln(i);
    }
}

which, when called with a compile time constant acts effectively like

void foo(size_t i)()
{
    pragma(msg, i);
}

so

foo(1), being a CTFE'able, triggers the pragma, while foo(i) for volatile i triggers the writeln.


Reply via email to