Kotlin error: no set method providing array access

Kotlin の error: no set method providing array access は明示的にキャストして型を合わせると解消できる

fun main(argv: Array<String>) {
    val d = LongArray(10)
    d[0] += 1   // error: no set method providing array access
    d[0] += 1L  // good
    d[0] = d[0] + 1  // good

    val x = 2
    d[1] += x  // error: no set method providing array access
    d[1] += x.toLong()  // good
}

このコンパイルエラーは

  1. Doubleの配列にInt, Floatなど、型が異なるときに発生する
  2. +=に限らず、ほかの演算代入でもエラーが発生する
  3. プリミティブ配列、ArrayList、MutableListなども同様にエラーが起きる
  4. Listでも同様のエラーが発生するがListはReadOnlyなので期待通りのエラーである

疑問なのは、KotlinではLongにIntを演算代入すること(a += b)は問題なくできるのに、Longの配列の要素に対してIntの演算代入すること(a[i]+=b)はできないということ。3年前のバグ報告があるので将来的には型の異なる加算代入を可能、もしくは不可能で統一されるかもしれない。
https://youtrack.jetbrains.com/issue/KT-19249

Kotlinにおいて演算子は糖衣構文で、aがオブジェクトである場合 a += b は a.plusAssign(b)、a[i] = b は a.set(i, b) にそれぞれ等しい。Operator overloading - Kotlin Programming Language
しかし、a[i] += b は定義されておらず挙動が不明である。おそらく a[i] = a[i] + bに変換されるはずだが、この場合は型が異なっていても+演算が吸収するはず。それができていない理由は不明である。