On Tue, 17 Nov 2009 08:14:55 -0500, Bill Baxter <wbax...@gmail.com> wrote:

Currently this doesn't work, because the CTFE function doesn't "know"
that it's running compile-time:

int templ_incr(int x)() {
    return x+1;
}

int ctfe_incr(int x) {
    return templ_incr!(x);
}

Seems common to write a function that you know is only intended to be
used compile-time.
But it can't compile because the compiler doesn't know you only plan
to call it at compile-time.

Is something version(__ctfe) might help with?  E.g.
version(__ctfe) {
// only allow cfte_incr to be called at compile-time so it can use templates
    int ctfe_incr(int x) {
        return templ_incr!(x);
    }
}

Or is there something more fundamental preventing CTFE funcs from
instantiating templates?

I think it may be a valid point, but it also may be a case of factoring. Do you have a real example? In the one you posted, you can trivially rewrite

ctfe_incr(x);

as

templ_incr!(x)(); // not sure if parens are optional there...

or trivially rewrite ctfe_incr as:

int ctfe_incr(int x) {
  return x + 1;
}

A real example would go a long way in furthering the cause...

-Steve

Reply via email to