namespace; include rt; enum shape { circle { int r; }, rect { int w; int h; }, dot }; int area(shape* s) { switch (s) { case circle(r): return r * r * 3; case rect(w, h): return w * h; case dot: return 0; } return -1; } fn main() { shape* s = shape.circle(3); rt.put_n(area(s)); rt.put_c(10); rt.free(s); shape* t = shape.rect(2, 5); rt.put_n(area(t)); rt.put_c(10); rt.free(t); }