// @dart = 2.9
library test;

A get target => null;
T f<T>() => null;

class A {
  C operator *(D value) => null;
  C operator +(int value) => null;
}

class B {
  E operator *(F value) => null;
  E operator +(int value) => null;
}

class C extends B {}

class D {}

class E {}

class F {}

main() {}
void set target(B value) {}
void test1() {}
void test2() {}
void test3() {}
