-void(string, ...) print = #1;
-string(float) ftos = #2;
+enum {
+ // this behaviour is confusing, but I like that
+ // we support it.
+ __ = (__ - 1),
+ A = (__ + 1),
+
+ B,
+ C
+};
enum {
- FOO,
- BAR,
- BAZ,
- OMG = BAR,
- POO,
- LAST = OMG + POO
+ D = C + B,
+ E = C + C,
+ F = C + D,
+};
+
+enum {
+ G = (B + F), H = (C + F),
+ I = (D + F), J = (B + I)
+};
+enum {
+ K = A + B - C + D - E + F *
+ G - H + I - J + A - B -
+ J + A,
+ L,
+ M,
+ N
+};
+
+enum : flag {
+ F1, /* = 1 << 1 */
+ F2, /* = 1 << 2 */
+ F3 /* = 1 << 3 */
};
-enum {A};
-enum {B=A+1};
-enum {C=A};
+/* reversed enumeration */
+enum : reverse {
+ R1, // 3
+ R2, // 2
+ R3, // 1
+ R4 // 0
+};
void main() {
- print(ftos(FOO), "\n");
- print(ftos(BAR), "\n");
- print(ftos(BAZ), "\n");
- print(ftos(OMG), "\n");
- print(ftos(POO), "\n");
- print(ftos(LAST), "\n");
+ print(ftos(A), "\n");
+ print(ftos(B), "\n");
print(ftos(C), "\n");
-}
+ print(ftos(D), "\n");
+ print(ftos(E), "\n");
+ print(ftos(F), "\n");
+ print(ftos(G), "\n");
+ print(ftos(H), "\n");
+ print(ftos(I), "\n");
+ print(ftos(J), "\n");
+ print(ftos(K), "\n");
+ print(ftos(L), "\n");
+ print(ftos(M), "\n");
+ print(ftos(N), "\n");
+
+ print(ftos(F1), "\n");
+ print(ftos(F2), "\n");
+ print(ftos(F3), "\n");
+
+ print(ftos(R1), "\n");
+ print(ftos(R2), "\n");
+ print(ftos(R3), "\n");
+ print(ftos(R4), "\n");
+};