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