Search code examples
kotlinoperator-overloadingincrementdecrementextension-function

Unable To Define An Operator Extension Function For The Increment and Decrement Operators


For some reason. I am unable to define an extension operator function for the operators ++ and -- while being able to define member operator functions for the same operators.

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
object _12_IncrementAndDecrementOperatorsCantBeExtensionFunctions_Test {
    private class X {
        operator fun inc(): X = X()
        operator fun dec(): X = X()
    }

    private class Y

    /*Compile-time | 'operator' modifier is inapplicable on this function: receiver must be a supertype of the return type*/
    private operator fun Y.inc(): Y = Y()

    /*Compile-time | 'operator' modifier is inapplicable on this function: receiver must be a supertype of the return type*/
    private operator fun Y.dec(): Y = Y()
}

Am i missing something? Is there a reason for that limitation?


Solution

  • It will work if you define the operators outside of the _12_IncrementAndDecrementOperatorsCantBeExtensionFunctions_Test object:

    class Y
    
    operator fun Y.inc(): Y = Y()
    
    operator fun Y.dec(): Y = Y()
    

    It's actually a bug in Kotlin: https://youtrack.jetbrains.com/issue/KT-24800