contract C {
    function f(uint256 x) public returns (uint256) {
        return this.eval(this.g, x);
    }

    function f2(uint256 x) public returns (uint256) {
        return eval(this.g, x);
    }

    function eval(function(uint) external returns (uint) x, uint a) public returns (uint) {
        return x(a);
    }

    function g(uint256 x) public returns (uint256) {
        return x + 1;
    }
}

// ----
// f(uint256): 7 -> 8
// f2(uint256): 7 -> 8
