nameExpr is f decl is f: function accepting unspecified arguments returning nothing with body CompoundStmt Declaration of f: signed int Declaration of f: double Expression Statement: Cast of: Name: f to: char Expression Statement: Cast of: Name: f to: pointer to function accepting unspecified arguments returning signed int newExpr is Variable Expression: f: function accepting unspecified arguments returning nothing decl is f: double newExpr is Variable Expression: f: double decl is f: signed int newExpr is Variable Expression: f: signed int alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: f: function accepting unspecified arguments returning nothing (types: pointer to function accepting unspecified arguments returning nothing ) Environment: Cost ( 0, 0, 0 ): Variable Expression: f: double (types: lvalue double ) Environment: Cost ( 0, 0, 0 ): Variable Expression: f: signed int (types: lvalue signed int ) Environment: there are 3 alternatives before elimination there are 3 alternatives after elimination alternatives before prune: Cost ( 1, 0, 0 ): Cast of: Variable Expression: f: signed int to: char (types: char ) Environment: Cost ( 1, 0, 0 ): Cast of: Variable Expression: f: double to: char (types: char ) Environment: marking ambiguous there are 1 alternatives before elimination nameExpr is f decl is f: function accepting unspecified arguments returning nothing with body CompoundStmt Declaration of f: signed int Declaration of f: double Expression Statement: Cast of: Name: f to: char Expression Statement: Cast of: Name: f to: pointer to function accepting unspecified arguments returning signed int newExpr is Variable Expression: f: function accepting unspecified arguments returning nothing decl is f: double newExpr is Variable Expression: f: double decl is f: signed int newExpr is Variable Expression: f: signed int alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: f: function accepting unspecified arguments returning nothing (types: pointer to function accepting unspecified arguments returning nothing ) Environment: Cost ( 0, 0, 0 ): Variable Expression: f: double (types: lvalue double ) Environment: Cost ( 0, 0, 0 ): Variable Expression: f: signed int (types: lvalue signed int ) Environment: there are 3 alternatives before elimination there are 3 alternatives after elimination Error: Can't choose between alternatives for expression Cast of: Name: f to: char Alternatives are: Cost ( 1, 0, 0 ): Cast of: Variable Expression: f: signed int to: char (types: char ) Environment: Cost ( 1, 0, 0 ): Cast of: Variable Expression: f: double to: char (types: char ) Environment: Error: No reasonable alternatives for expression Cast of: Name: f to: pointer to function accepting unspecified arguments returning signed int