1 : n * silnia(n-1); }
static int x = silnia(5);
Wartość zmiennej x będzie obliczona w czasie kompilacji.
Można to sprawdzić, korzystając z możliwości D operowania na ciągach znaków w czasie kompilacji oraz z instrukcji kompilatora pragma(msg,): template itoa(long i) { static assert (i > 0); static if (i < 10) const char[] itoa = "" ~ cast(char)(i + '0'); else const char[] itoa = itoa!(i / 10) ~ itoa!(i % 10); }
pragma(msg, itoa!(silnia(6));
Ponieważ szablon itoa parametryzowany jest wartością typu long, użyta jest instrukcja warunkowej kompilacji static assert, może ona być pominięta, jeśli typ argumentu i zostanie zmieniony na ulong.
Instrukcja ta spowoduje przerwanie kompilacji, jeśli podany argument jest liczbą ujemną.
Przypisy
Bibliografia
Kategoria:Konstrukcje programistyczne