== Why is this an issue?

The conventional expectation of operators that end with ``++=++``, such as ``+++=++``, ``++-=++``, ``++*=++``, and so on, is that the result of the operation will be assigned to the operand on the left-hand side of the operator.


Define any other behavior and you almost guarantee that the users of your code will misunderstand and therefore misuse your operator.


=== Noncompliant code example

[source,swift]
----
func **= (p1:Int, p2:Int) -> Int {   // Noncompliant. Change operator name or update value of first parameter
    return p1 ** p2
}

func => (p1:Int, p2:Int) -> Int {  // Compliant; doesn't end with '='
    return p1 ** p1 ** p2
}
----


=== Compliant solution

[source,swift]
----
func **= (inout p1:Int, p2:Int) { 
    p1 = p1 ** p2
}

func => (p1:Int, p2:Int) -> Int {
    return p1 ** p1 ** p2
}
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Assign the value of the operation to "xxx".


endif::env-github,rspecator-view[]
