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); put_n(area(s)); put_c(10); free(d*s); shape* t = shape.rect(2, 5); put_n(area(t)); put_c(10); free(d*t); return 0; }