Mixins: to!string cannot be interpreted at compile time
spir
denis.spir at gmail.com
Tue Mar 1 02:45:30 PST 2011
On 03/01/2011 07:58 AM, Peter Lundgren wrote:
> I'm trying to use mixins to generate an array of numbers that are coprime to a
> statically known value. I've tried the following, but I receive the error:
>
> Error: to(i) ~ ", " cannot be interpreted at compile time
>
>
> string makePossibleAValues(string name, byte m) {
> string result = "immutable byte[] "~name~" = [";
> foreach (i; 0 .. m) {
> if (coprime(i, m)) {
> result ~= to!string(i) ~ ", ";
> }
> }
> return result ~ "];";
> }
>
> bool coprime(ulong a, ulong b) {
> return gcd(a, b) == 1;
> }
>
> ulong gcd(ulong a, ulong b) {
> while (b) {
> auto t = b;
> b = a % b;
> a = t;
> }
> return a;
> }
>
> mixin(makePossibleAValues("aValues", 26));
>
>
> makePossibleAValues("aValues", 26) produces the correct result, "immutable
> byte[] aValues = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25, ];", at runtime
> and I know to!string can be used in mixins. Any idea as to why this particular
> code is having trouble with to!string?
Not sure because I never use string mixins, but I guess the answer is precisely
what the error says. Why don't you believe it?
makePossibleAValues() obviously returns a runtime value, so mixin() cannot
evaluate it, I guess.
Denis
--
_________________
vita es estrany
spir.wikidot.com
More information about the Digitalmars-d-learn
mailing list