Ø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; }