tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(10,29): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly.
  Type argument candidate 'number' is not a valid type argument because it is not a supertype of candidate 'string'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(15,21): error TS2345: Argument of type 'Date' is not assignable to parameter of type 'T'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(16,22): error TS2345: Argument of type 'number' is not assignable to parameter of type 'T'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(25,23): error TS2345: Argument of type '(a: T) => T' is not assignable to parameter of type '(x: Date) => Date'.
  Types of parameters 'a' and 'x' are incompatible.
    Type 'T' is not assignable to type 'Date'.
      Type 'RegExp' is not assignable to type 'Date'.
        Property 'toDateString' is missing in type 'RegExp'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(37,36): error TS2345: Argument of type '(x: E) => F' is not assignable to parameter of type '(x: E) => E'.
  Type 'F' is not assignable to type 'E'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(50,21): error TS2345: Argument of type 'Date' is not assignable to parameter of type 'T'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(51,22): error TS2345: Argument of type 'number' is not assignable to parameter of type 'T'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(60,23): error TS2345: Argument of type '(a: T) => T' is not assignable to parameter of type '(x: Date) => Date'.
  Types of parameters 'a' and 'x' are incompatible.
    Type 'T' is not assignable to type 'Date'.
      Type 'RegExp' is not assignable to type 'Date'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(67,51): error TS2304: Cannot find name 'U'.
tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts(67,57): error TS2304: Cannot find name 'U'.


==== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithGenericSignatureArguments2.ts (10 errors) ====
    // When a function expression is inferentially typed (section 4.9.3) and a type assigned to a parameter in that expression references type parameters for which inferences are being made, 
    // the corresponding inferred type arguments to become fixed and no further candidate inferences are made for them.
    
    module onlyT {
        function foo<T>(a: (x: T) => T, b: (x: T) => T) {
            var r: (x: T) => T;
            return r;
        }
    
        var r1: (x: {}) => {} = foo((x: number) => 1, (x: string) => '');
                                ~~~
!!! error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly.
!!! error TS2453:   Type argument candidate 'number' is not a valid type argument because it is not a supertype of candidate 'string'.
    
        function other2<T extends Date>(x: T) {
            var r7 = foo((a: T) => a, (b: T) => b); // T => T
            // BUG 835518
            var r9 = r7(new Date()); // should be ok
                        ~~~~~~~~~~
!!! error TS2345: Argument of type 'Date' is not assignable to parameter of type 'T'.
            var r10 = r7(1); // error
                         ~
!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'T'.
        }
    
        function foo2<T extends Date>(a: (x: T) => T, b: (x: T) => T) {
            var r: (x: T) => T;
            return r;
        }
    
        function other3<T extends RegExp>(x: T) {
            var r7 = foo2((a: T) => a, (b: T) => b); // error
                          ~~~~~~~~~~~
!!! error TS2345: Argument of type '(a: T) => T' is not assignable to parameter of type '(x: Date) => Date'.
!!! error TS2345:   Types of parameters 'a' and 'x' are incompatible.
!!! error TS2345:     Type 'T' is not assignable to type 'Date'.
!!! error TS2345:       Type 'RegExp' is not assignable to type 'Date'.
!!! error TS2345:         Property 'toDateString' is missing in type 'RegExp'.
            var r7b = foo2((a) => a, (b) => b); // valid, T is inferred to be Date
        }
    
        enum E { A }
        enum F { A }
    
        function foo3<T>(x: T, a: (x: T) => T, b: (x: T) => T) {
            var r: (x: T) => T;
            return r;
        }
    
        var r7 = foo3(E.A, (x) => E.A, (x) => F.A); // error
                                       ~~~~~~~~~~
!!! error TS2345: Argument of type '(x: E) => F' is not assignable to parameter of type '(x: E) => E'.
!!! error TS2345:   Type 'F' is not assignable to type 'E'.
    }
    
    module TU {
        function foo<T, U>(a: (x: T) => T, b: (x: U) => U) {
            var r: (x: T) => T;
            return r;
        }
    
        var r1: (x: {}) => {} = foo((x: number) => 1, (x: string) => '');
    
        function other2<T extends Date>(x: T) {
            var r7 = foo((a: T) => a, (b: T) => b); 
            var r9 = r7(new Date()); 
                        ~~~~~~~~~~
!!! error TS2345: Argument of type 'Date' is not assignable to parameter of type 'T'.
            var r10 = r7(1); 
                         ~
!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'T'.
        }
    
        function foo2<T extends Date, U extends Date>(a: (x: T) => T, b: (x: U) => U) {
            var r: (x: T) => T;
            return r;
        }
    
        function other3<T extends RegExp>(x: T) {
            var r7 = foo2((a: T) => a, (b: T) => b); 
                          ~~~~~~~~~~~
!!! error TS2345: Argument of type '(a: T) => T' is not assignable to parameter of type '(x: Date) => Date'.
!!! error TS2345:   Types of parameters 'a' and 'x' are incompatible.
!!! error TS2345:     Type 'T' is not assignable to type 'Date'.
!!! error TS2345:       Type 'RegExp' is not assignable to type 'Date'.
            var r7b = foo2((a) => a, (b) => b); 
        }
    
        enum E { A }
        enum F { A }
    
        function foo3<T>(x: T, a: (x: T) => T, b: (x: U) => U) {
                                                      ~
!!! error TS2304: Cannot find name 'U'.
                                                            ~
!!! error TS2304: Cannot find name 'U'.
            var r: (x: T) => T;
            return r;
        }
    
        var r7 = foo3(E.A, (x) => E.A, (x) => F.A);
    }