nameExpr is x decl is x: function with parameters instance of type T (not function type) returning instance of type T (not function type) newExpr is Variable Expression: x: function with parameters instance of type T (not function type) returning instance of type T (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: x: function with parameters instance of type T (not function type) returning instance of type T (not function type) (types: pointer to function with parameters instance of type T (not function type) returning instance of type T (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is t decl is t: instance of type T (not function type) newExpr is Variable Expression: t: instance of type T (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: t: instance of type T (not function type) (types: lvalue instance of type T (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination findSubExprs Cost ( 0, 0, 0 ): Variable Expression: t: instance of type T (not function type) (types: lvalue instance of type T (not function type) ) Environment: working on alternative: Cost ( 0, 0, 0 ): Variable Expression: x: function with parameters instance of type T (not function type) returning instance of type T (not function type) (types: pointer to function with parameters instance of type T (not function type) returning instance of type T (not function type) ) Environment: formal type is instance of type T (not function type) actual type is lvalue instance of type T (not function type) need assertions: ============= original indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== ============= new indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== actual expression: Variable Expression: t: instance of type T (not function type) --- results are lvalue instance of type T (not function type) converting lvalue instance of type T (not function type) to instance of type T (not function type) cost is( 0, 0, 0 ) Case +++++++++++++ formals are: instance of type T (not function type) actuals are: Variable Expression: t: instance of type T (not function type) bindings are: cost of conversion is:( 0, 0, 0 ) alternatives before prune: Cost ( 0, 0, 0 ): Application of Variable Expression: x: function with parameters instance of type T (not function type) returning instance of type T (not function type) to arguments Variable Expression: t: instance of type T (not function type) (types: instance of type T (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 0 ): Cast of: Application of Variable Expression: x: function with parameters instance of type T (not function type) returning instance of type T (not function type) to arguments Variable Expression: t: instance of type T (not function type) to: instance of type T (not function type) (types: instance of type T (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is ?=? decl is ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) newExpr is Variable Expression: ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) decl is ?=?: automatically generated function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) newExpr is Variable Expression: ?=?: function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) decl is ?=?: automatically generated function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) with body CompoundStmt Return Statement, returning: Applying untyped: Name: ?=? ...to: Cast of: Variable Expression: _dst: pointer to instance of type U (not function type) to: pointer to pointer to signed int Cast of: Variable Expression: _src: instance of type U (not function type) to: pointer to signed int newExpr is Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) decl is ?=?: function with parameters pointer to signed int signed int returning signed int newExpr is Variable Expression: ?=?: function with parameters pointer to signed int signed int returning signed int alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) (types: pointer to forall _0_DT: incomplete type function with parameters pointer to pointer to instance of type _0_DT (not function type) pointer to instance of type _0_DT (not function type) returning pointer to instance of type _0_DT (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) (types: pointer to function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) (types: pointer to function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters pointer to signed int signed int returning signed int (types: pointer to function with parameters pointer to signed int signed int returning signed int ) Environment: there are 4 alternatives before elimination there are 4 alternatives after elimination alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: _dst: pointer to instance of type U (not function type) (types: lvalue pointer to instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is u decl is u: instance of type U (not function type) newExpr is Variable Expression: u: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 2 ): Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) (types: instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is ?=? decl is ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) newExpr is Variable Expression: ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) decl is ?=?: automatically generated function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) newExpr is Variable Expression: ?=?: function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) decl is ?=?: automatically generated function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) with body CompoundStmt Return Statement, returning: Applying untyped: Name: ?=? ...to: Cast of: Variable Expression: _dst: pointer to instance of type U (not function type) to: pointer to pointer to signed int Cast of: Variable Expression: _src: instance of type U (not function type) to: pointer to signed int newExpr is Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) decl is ?=?: function with parameters pointer to signed int signed int returning signed int newExpr is Variable Expression: ?=?: function with parameters pointer to signed int signed int returning signed int alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) (types: pointer to forall _0_DT: incomplete type function with parameters pointer to pointer to instance of type _0_DT (not function type) pointer to instance of type _0_DT (not function type) returning pointer to instance of type _0_DT (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) (types: pointer to function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) (types: pointer to function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) ) Environment: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters pointer to signed int signed int returning signed int (types: pointer to function with parameters pointer to signed int signed int returning signed int ) Environment: there are 4 alternatives before elimination there are 4 alternatives after elimination nameExpr is u_instance decl is u_instance: instance of type U (not function type) with initializer Simple Initializer: Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) with environment: Types: Non-types: newExpr is Variable Expression: u_instance: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u_instance: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 0 ): Address of: Variable Expression: u_instance: instance of type U (not function type) (types: pointer to instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination findSubExprs Cost ( 0, 0, 0 ): Address of: Variable Expression: u_instance: instance of type U (not function type) (types: pointer to instance of type U (not function type) ) Environment: nameExpr is u decl is u: instance of type U (not function type) newExpr is Variable Expression: u: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination findSubExprs Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: working on alternative: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters pointer to signed int signed int returning signed int (types: pointer to function with parameters pointer to signed int signed int returning signed int ) Environment: formal type is pointer to signed int actual type is pointer to instance of type U (not function type) working on alternative: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) (types: pointer to function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) ) Environment: formal type is pointer to instance of type U (not function type) actual type is pointer to instance of type U (not function type) formal type is instance of type U (not function type) actual type is lvalue instance of type U (not function type) need assertions: ============= original indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== ============= new indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== working on alternative: Cost ( 0, 0, 0 ): Variable Expression: ?=?: function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) (types: pointer to function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) ) Environment: formal type is pointer to instance of type T (not function type) actual type is pointer to instance of type U (not function type) working on alternative: Cost ( 0, 0, 0 ): Variable Expression: ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) (types: pointer to forall _0_DT: incomplete type function with parameters pointer to pointer to instance of type _0_DT (not function type) pointer to instance of type _0_DT (not function type) returning pointer to instance of type _0_DT (not function type) ) Environment: formal type is pointer to pointer to instance of type _0_DT (not function type) actual type is pointer to instance of type U (not function type) actual expression: Address of: Variable Expression: u_instance: instance of type U (not function type) --- results are pointer to instance of type U (not function type) converting pointer to instance of type U (not function type) to pointer to instance of type U (not function type) cost is( 0, 0, 0 ) actual expression: Variable Expression: u: instance of type U (not function type) --- results are lvalue instance of type U (not function type) converting lvalue instance of type U (not function type) to instance of type U (not function type) cost is( 0, 0, 2 ) Case +++++++++++++ formals are: _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) actuals are: Address of: Variable Expression: u_instance: instance of type U (not function type) Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) bindings are: cost of conversion is:( 0, 0, 2 ) alternatives before prune: Cost ( 0, 0, 2 ): Application of Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) to arguments Address of: Variable Expression: u_instance: instance of type U (not function type) Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) (types: instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 1 ): Cast of: Application of Variable Expression: ?=?: function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) to arguments Address of: Variable Expression: u_instance: instance of type U (not function type) Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) to: nothing (types: ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is ?++ decl is ?++: function with parameters pointer to signed int returning signed int newExpr is Variable Expression: ?++: function with parameters pointer to signed int returning signed int alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: ?++: function with parameters pointer to signed int returning signed int (types: pointer to function with parameters pointer to signed int returning signed int ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is *? decl is *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) newExpr is Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) (types: pointer to forall _0_T: type with assertions ?=?: pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) function with parameters pointer to instance of type _0_T (not function type) returning lvalue instance of type _0_T (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is u decl is u: instance of type U (not function type) newExpr is Variable Expression: u: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination findSubExprs Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: working on alternative: Cost ( 0, 0, 0 ): Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) (types: pointer to forall _0_T: type with assertions ?=?: pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) function with parameters pointer to instance of type _0_T (not function type) returning lvalue instance of type _0_T (not function type) ) Environment: formal type is pointer to instance of type _0_T (not function type) actual type is lvalue instance of type U (not function type) need assertions: ?=?: pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) (used)============= original indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== ============= new indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== inferRecursive: assertion is ?=?: pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) inferRecursive: candidate is ?=?: forall DT: incomplete type function with parameters pointer to pointer to instance of type DT (not function type) pointer to instance of type DT (not function type) returning pointer to instance of type DT (not function type) unifying pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) with pointer to forall _1_DT: incomplete type function with parameters pointer to pointer to instance of type _1_DT (not function type) pointer to instance of type _1_DT (not function type) returning pointer to instance of type _1_DT (not function type) inferRecursive: candidate is ?=?: automatically generated function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) unifying pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) with pointer to function with parameters _dst: pointer to instance of type T (not function type) _src: instance of type T (not function type) returning instance of type T (not function type) inferRecursive: candidate is ?=?: automatically generated function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) with body CompoundStmt Return Statement, returning: Applying untyped: Name: ?=? ...to: Cast of: Variable Expression: _dst: pointer to instance of type U (not function type) to: pointer to pointer to signed int Cast of: Variable Expression: _src: instance of type U (not function type) to: pointer to signed int unifying pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) with pointer to function with parameters _dst: pointer to instance of type U (not function type) _src: instance of type U (not function type) returning instance of type U (not function type) inferRecursive: candidate is ?=?: function with parameters pointer to signed int signed int returning signed int unifying pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) with pointer to function with parameters pointer to signed int signed int returning signed int success! satisfying assertion 15 ?=?: pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) with declaration 25 ?=?: function with parameters pointer to signed int signed int returning signed int actual expression: Variable Expression: u: instance of type U (not function type) --- results are lvalue instance of type U (not function type) converting lvalue instance of type U (not function type) to pointer to instance of type _0_T (not function type) cost is( 0, 0, 1 ) converting pointer to function with parameters pointer to signed int signed int returning signed int to pointer to function with parameters pointer to instance of type _0_T (not function type) instance of type _0_T (not function type) returning instance of type _0_T (not function type) cost of conversion is ( 0, 0, 0 ) Case +++++++++++++ formals are: pointer to instance of type _0_T (not function type) actuals are: Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int bindings are: ( _0_T ) -> signed int (no widening) cost of conversion is:( 0, 4, 1 ) alternatives before prune: Cost ( 0, 4, 1 ): Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int (types: lvalue instance of type _0_T (not function type) ) Environment: ( _0_T ) -> signed int (no widening) there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 4, 1 ): Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int (types: pointer to signed int ) Environment: ( _0_T ) -> signed int (no widening) there are 1 alternatives before elimination there are 1 alternatives after elimination findSubExprs Cost ( 0, 4, 1 ): Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int (types: pointer to signed int ) Environment: ( _0_T ) -> signed int (no widening) working on alternative: Cost ( 0, 0, 0 ): Variable Expression: ?++: function with parameters pointer to signed int returning signed int (types: pointer to function with parameters pointer to signed int returning signed int ) Environment: formal type is pointer to signed int actual type is pointer to signed int need assertions: ============= original indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== ============= new indexer ===idTable=== ===typeTable=== ===structTable=== ===enumTable=== ===unionTable=== ===contextTable=== actual expression: Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int --- results are pointer to signed int converting pointer to signed int to pointer to signed int cost is( 0, 0, 0 ) Case +++++++++++++ formals are: pointer to signed int actuals are: Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int bindings are: ( _0_T ) -> signed int (no widening) cost of conversion is:( 0, 0, 0 ) alternatives before prune: Cost ( 0, 0, 0 ): Application of Variable Expression: ?++: function with parameters pointer to signed int returning signed int to arguments Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int (types: signed int ) Environment: ( _0_T ) -> signed int (no widening) there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 1 ): Cast of: Application of Variable Expression: ?++: function with parameters pointer to signed int returning signed int to arguments Address of: Application of Variable Expression: *?: forall T: type with assertions ?=?: pointer to function with parameters pointer to instance of type T (not function type) instance of type T (not function type) returning instance of type T (not function type) function with parameters pointer to instance of type T (not function type) returning lvalue instance of type T (not function type) to arguments Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int with inferred parameters: ?=?: function with parameters pointer to signed int signed int returning signed int to: nothing (types: ) Environment: ( _0_T ) -> signed int (no widening) there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is u decl is u: instance of type U (not function type) newExpr is Variable Expression: u: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 2 ): Cast of: Variable Expression: u: instance of type U (not function type) to: instance of type U (not function type) (types: instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination nameExpr is u decl is u: instance of type U (not function type) newExpr is Variable Expression: u: instance of type U (not function type) alternatives before prune: Cost ( 0, 0, 0 ): Variable Expression: u: instance of type U (not function type) (types: lvalue instance of type U (not function type) ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination alternatives before prune: Cost ( 0, 0, 1 ): Cast of: Variable Expression: u: instance of type U (not function type) to: pointer to signed int (types: pointer to signed int ) Environment: there are 1 alternatives before elimination there are 1 alternatives after elimination Error: No reasonable alternatives for expression Cast of: Variable Expression: _dst: pointer to instance of type U (not function type) to: pointer to pointer to signed int