Polymorphic* Node
Øclass node {
Øpublic: enum Tag { I, P };
Øprivate:
Ø union { int i; node * p; };
Ø Tag tag;
Ø void check(Tag t){ if (tag!=t) error();}
Ø node * next;
Øpublic:
Ø Tag get_tag() { return tag; }
Ø int & ival() { check(I); return i; }
Ø node * & pval() { check(P); return p; }
*polymorphic: able to contain different types