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