struct Node{ type :: NodeType; if( type == Leaf ) leaf :: Leaf; if( type == Node ) nodeA :: Node; if( type == Node ) nodeB :: Node; } enum NodeType :: byte { 0: Empty; 1: Node; 2: Leaf; else: [error("Invalid node type")]; }