==== tests/cases/compiler/overloadResolutionClassConstructors.ts (19 errors) ====
    class SomeBase {
        private n;
    
        public s: string;
    }
    class SomeDerived1 extends SomeBase {
        private m;
    }
    class SomeDerived2 extends SomeBase {
        private m;
    }
    class SomeDerived3 extends SomeBase {
        private m;
    }
    
    
    // Ambiguous call picks the first overload in declaration order
    class fn1 {
        constructor(s: string);
        constructor(s: number);
        constructor() { }
    }
    
    new fn1(undefined);
    
    // No candidate overloads found
    new fn1({}); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(27,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'string' to argument 1 which is of type '{}'.
        ~~~
!!! overloadResolutionClassConstructors.ts(27,5): error TS2085: Could not select overload for 'new' expression.
    
    // Generic and non - generic overload where generic overload is the only candidate when called with type arguments
    class fn2<T> {
        constructor(s: string, n: number);
        constructor(n: number, t: T);
        constructor() { }
    }
    
    var d = new fn2<Date>(0, undefined);
    
    // Generic and non - generic overload where generic overload is the only candidate when called without type arguments
    var s = new fn2(0, '');
    
    // Generic and non - generic overload where non - generic overload is the only candidate when called with type arguments
    new fn2<Date>('', 0); // OK
    
    // Generic and non - generic overload where non - generic overload is the only candidate when called without type arguments
    new fn2('', 0); // OK
    
    // Generic overloads with differing arity called without type arguments
    class fn3<T, U, V> {
        constructor(n: T);
        constructor(s: string, t: T, u: U);
        constructor(v: V, u: U, t: T);
        constructor() { }
    }
    
    new fn3(3);
    new fn3('', 3, '');
    new fn3(5, 5, 5);
    
    // Generic overloads with differing arity called with type arguments matching each overload type parameter count
    new fn3<number>(4); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(60,5): error TS4027: Signature expected 3 type arguments, got 1 instead.
    new fn3<string, string>('', '', '');  // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(61,5): error TS4027: Signature expected 3 type arguments, got 2 instead.
    new fn3<number, string, string>('', '', 3);
    
    // Generic overloads with differing arity called with type argument count that doesn't match any overload
    new fn3<number, number, number, number>(); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(65,5): error TS4027: Signature expected 3 type arguments, got 4 instead.
    
    // Generic overloads with constraints called with type arguments that satisfy the constraints
    class fn4<T extends string, U extends number> {
        constructor(n: T, m: U);
        constructor() { }
    }
    new fn4<string, number>('', 3);
    new fn4<string, number>(3, ''); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(73,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'string' to argument 1 which is of type 'number'.
        ~~~
!!! overloadResolutionClassConstructors.ts(73,5): error TS2085: Could not select overload for 'new' expression.
    new fn4<number, string>('', 3); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(74,5): error TS2086: Type 'number' does not satisfy the constraint 'string' for type parameter 'T extends string'.
    new fn4<number, string>(3, ''); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(75,5): error TS2086: Type 'number' does not satisfy the constraint 'string' for type parameter 'T extends string'.
    
    // Generic overloads with constraints called without type arguments but with types that satisfy the constraints
    new fn4('', 3);
    new fn4(3, ''); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(79,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'string' to argument 1 which is of type 'number'.
        ~~~
!!! overloadResolutionClassConstructors.ts(79,5): error TS2085: Could not select overload for 'new' expression.
    new fn4(3, undefined); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(80,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'string' to argument 1 which is of type 'number'.
        ~~~
!!! overloadResolutionClassConstructors.ts(80,5): error TS2085: Could not select overload for 'new' expression.
    new fn4('', null);
    
    // Generic overloads with constraints called with type arguments that do not satisfy the constraints
    new fn4<boolean, Date>(null, null); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(84,5): error TS2086: Type 'boolean' does not satisfy the constraint 'string' for type parameter 'T extends string'.
    
    // Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints
    new fn4(true, null); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(87,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'string' to argument 1 which is of type 'boolean'.
        ~~~
!!! overloadResolutionClassConstructors.ts(87,5): error TS2085: Could not select overload for 'new' expression.
    new fn4(null, true); // Error
        ~~~
!!! overloadResolutionClassConstructors.ts(88,5): error TS2082: Supplied parameters do not match any signature of call target:
!!! 	Could not apply type 'number' to argument 2 which is of type 'boolean'.
        ~~~
!!! overloadResolutionClassConstructors.ts(88,5): error TS2085: Could not select overload for 'new' expression.
    
    // Non - generic overloads where contextual typing of function arguments has errors
    class fn5 {
        constructor(f: (n: string) => void);
        constructor(f: (n: number) => void);
        constructor() { return undefined; }
    }
    new fn5((n) => n.toFixed());
    new fn5((n) => n.substr(0));
    new fn5((n) => n.blah); // Error
                     ~~~~
!!! overloadResolutionClassConstructors.ts(98,18): error TS2094: The property 'blah' does not exist on value of type 'string'.
    
    
    