I'm working on a mathematical expression interpreter for D, which would allow for closed form mathematical expressions to be specified as string literals at runtime and be evaluated. For example:
MathExp myExpression = mathExp("x^2 + e^cos(-x) - 2 * sqrt(pi)", "x"); writeln(myExpression(2)); // Does exactly what you think it does. I've found the syntax so convenient that I'd like to transparently specialize it on strings known at compile time. The idea is that, when the expression is hard-coded, you will still be able to use the MathExp interface, but your expression will evaluate at the full speed of a statically compiled function. Is there any way to test whether the value of an argument to a template function is known at compile time and specialize on this?