// !WITH_NEW_INFERENCE // !CHECK_TYPE // !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE fun simple() = 1 fun simple(a: Int = 3) = "" fun twoDefault(a: Int = 2) = 1 fun twoDefault(a: Any = 2, b: String = "") = "" fun withGeneric(a: T) = 1 fun withGeneric(a: T, b: Int = 4) = "" fun discriminateGeneric(a: T) = 1 fun discriminateGeneric(a: Int, b: String = "") = "" fun withDefaultGeneric(t: T, d: T? = null) = 1 fun withDefaultGeneric(t: T, d: T? = null, a: Int = 1) = "" fun withDefaults(a: Any = 2) = 1 fun withDefaults(a: Int = 2, b: String = "") = "" fun withGenericDefaults(t: T, d: T? = null) = 1 fun withGenericDefaults(t: T, d: T? = null, a: Int = 1) = "" fun wrong(a: Int = 1) {} fun wrong(a: String = "", b: Int = 1) {} fun test() { val a = simple() a checkType { _() } val b = simple(1) b checkType { _() } val c = twoDefault() c checkType { _() } val d = twoDefault(1) d checkType { _() } val e = twoDefault(1, "") e checkType { _() } val f = withGeneric(3) f checkType { _() } val g = discriminateGeneric(1) g checkType { _() } val h = withDefaultGeneric("") h checkType { _() } withDefaults(1) withGenericDefaults("") wrong(null!!) }