CTFE calling a template: Error: expression ... is not a valid template value argument
Jens Mueller
jens.k.mueller at gmx.de
Fri Sep 21 03:23:21 PDT 2012
Timon Gehr wrote:
> On 09/20/2012 11:22 PM, Jens Mueller wrote:
> >Hi,
> >
> >I do not understand the following error message given the code:
> >
> >string foo(string f)
> >{
> > if (f == "somestring")
> > {
> > return "got somestring";
> > }
> > return bar!(foo("somestring"));
> >}
> >
> >template bar(string s)
> >{
> > enum bar = s;
> >}
> >
> >I'll with dmd v2.060 get:
> >test.d(7): called from here: foo("somestring")
> >test.d(7): called from here: foo("somestring")
> >test.d(7): called from here: foo("somestring")
> >test.d(7): Error: expression foo("somestring") is not a valid template value argument
> >test.d(12): called from here: foo("somestring")
> >test.d(12): called from here: foo("somestring")
> >test.d(7): Error: template instance test.bar!(foo("somestring")) error instantiating
> >
> >In line 7 I call the template bar. But I call with the string that is
> >returned by the CTFE of foo("somestring") which should return "got
> >somestring" but instead it seems that an expression is passed. How do I
> >force the evaluation foo("somestring")?
> >I haven't found a bug on this.
> >
> >Jens
> >
>
> You can file a diagnostics-bug.
>
> The issue is that CTFE can only interpret functions that are fully
> analyzed and therefore the analysis of foo depends circularly on
> itself. The compiler should spit out an error that indicates the
> issue.
That is true. I will file such a diagnostics bug with low priority.
> You could post an enhancement request to allow interpretation of
> incompletely-analyzed functions, if you think it is of any use.
I think it is.
What do you think?
Jens
More information about the Digitalmars-d
mailing list