library test;
import self as self;
import "dart:core" as core;

typedef F<T extends core::Object = dynamic> = (T) → void;
class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method f<U extends (self::C::T) → void = dynamic>(self::C::f::U x) → void {}
}
static method g(self::C<core::num> c) → void {
  c.f<(core::Object) → void>((core::Object o) → dynamic {});
}
static method test() → void {
  self::g(new self::C::•<core::int>());
}
static method main() → void {}
