// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // @dart=2.9 class C { int value = 0; } extension Extension1 on C { C operator [](int index) => this..value += index + 1; void operator []=(int index, C other) => this.value += other.value + index + 1; C operator -(int val) => this; } main() { C c = C(); // Original term that produces an unexpected error. --Extension1(c)[42]; // The pre-decrement desugars as follows, which is also flagged as an error. Extension1(c)[42] -= 1; // The compound assignment desugars as follows, which is accepted. Extension1(c)[42] = Extension1(c)[42] - 1; }