// Object type literals permit overloads with optionality but they must match

var c: {
    func4?(x: number): number;
    func4(s: string): string; // error, mismatched optionality
    func5?: {
        (x: number): number;
        (s: string): string;
    };
};

var c2: {
    func4<T>(x: T): number;
    func4? <T>(s: T): string; // error, mismatched optionality
    func5?: {
        <T>(x: T): number;
        <T>(s: T): string;
    };
};