fun array1(vararg a : T) = a fun main(args : Array) { 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") x1 : String? val x2 = joinT(*1, "2") x2 : String? val x6 = joinT(1, *a) x6 : String? val x7 = joinT(1, *a, "3") x7 : String? val x8 = joinT(1, "4", *a, "3") x8 : String? val x9 = joinT(1, "4", *a) x9 : String? val x10 = joinT(1, "4", *a, *a, "3") x10 : String? val x11 = joinT(a = *a, x = 1) x11 : String? val x12 = joinT(x = 1, a = *a) x12 : String? } 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 }