// !WITH_NEW_INFERENCE // !CHECK_TYPE // !LANGUAGE: +ProhibitAssigningSingleElementsToVarargsInNamedForm +AllowAssigningArrayElementsToVarargsInNamedFormForFunctions fun array1(vararg a : T) = a fun main() { val a = array1("a", "b") val b = array1(1, 1) join(1) join(1, "2") join(1, "2", "3") join(*1, "2") join(1, *"2") join(x = 1, a = "2") join(x = *1, a = *"2") join(x = 1, a = a) join(x = 1, a = b) join(1, *a) join(1, *b) join(1, *a, "3") join(1, *b, "3") join(1, "4", *a, "3") join(1, "4", *b, "3") join(1, "4", *a) join(1, "4", *a, *a, "3") join(1, "4", *a, *b, "3") join(a = a, x = 1) join(a = b, x = 1) join(a = a, x = 1) joinG(1, "2") joinG(*1, "2") joinG(1, *"2") joinG(x = 1, a = a) joinG(x = 1, a = "2") joinG(x = *1, a = *"2") joinG(1, *a) joinG(1, *a, "3") joinG(1, "4", *a, "3") joinG(1, "4", *a) joinG(1, "4", *a, *a, "3") joinG(a = a, x = 1) joinG(1, "2") joinG(*1, "2") joinG(1, *"2") joinG(x = 1, a = a) joinG(x = 1, a = "2") joinG(x = *1, a = *"2") joinG(1, *a) joinG(1, *a, "3") joinG(1, "4", *a, "3") joinG(1, "4", *a) joinG(1, "4", *a, *a, "3") joinG(a = a, x = 1) val x1 = joinT(1, "2") checkSubtype(x1) val x2 = joinT(*1, "2") checkSubtype(x2) val x6 = joinT(1, *a) checkSubtype(x6) val x7 = joinT(1, *a, "3") checkSubtype(x7) val x8 = joinT(1, "4", *a, "3") checkSubtype(x8) val x9 = joinT(1, "4", *a) checkSubtype(x9) val x10 = joinT(1, "4", *a, *a, "3") checkSubtype(x10) val x11 = joinT(a = a, x = 1) checkSubtype(x11) val x12 = joinT(x = 1, a = a) checkSubtype(x12) } fun join(x : Int, vararg a : String) : String { val b = StringBuilder(x.toString()) for (s in a) { b.append(s) } return b.toString() } fun joinG(x : Int, vararg a : T) : String { val b = StringBuilder(x.toString()) for (s in a) { b.append(s) } return b.toString() } fun joinT(x : Int, vararg a : T) : T? { return null }