library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:16:40: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// A<dynamic> Function(String) test5() => A.foo; // Error.
//                                        ^
// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<X extends num> {
//         ^
//
// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:17:40: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// A<dynamic> Function(String) test6() => A.new; // Error.
//                                        ^
// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
// class A<X extends num> {
//         ^
//
// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:23:41: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// A<dynamic> Function(String) test11() => A.bar; // Error.
//                                         ^
//
import self as self;
import "dart:core" as core;

class A<X extends core::num> extends core::Object {
  constructor foo(self::A::X x) → self::A<self::A::X>
    : super core::Object::•() {}
  constructor •(self::A::X x) → self::A<self::A::X>
    : super core::Object::•() {}
  static factory bar<X extends core::num>(self::A::bar::X x) → self::A<self::A::bar::X>
    return new self::A::•<self::A::bar::X>(x);
}
static method test1() → (core::num) → self::A<core::num>
  return self::A::foo<core::num>;
static method test2() → (core::int) → self::A<core::int>
  return self::A::foo<core::int>;
static method test3() → (core::num) → self::A<core::num>
  return self::A::•<core::num>;
static method test4() → (core::int) → self::A<core::int>
  return self::A::•<core::int>;
static method test5() → (core::String) → self::A<dynamic>
  return self::A::foo<core::String>;
static method test6() → (core::String) → self::A<dynamic>
  return self::A::•<core::String>;
static method test7() → (core::num) → self::A<dynamic>
  return self::A::foo<core::num>;
static method test8() → (core::num) → self::A<dynamic>
  return self::A::•<core::num>;
static method test9() → (core::num) → self::A<core::num>
  return self::A::bar<core::num>;
static method test10() → (core::int) → self::A<core::int>
  return self::A::bar<core::int>;
static method test11() → (core::String) → self::A<dynamic>
  return self::A::bar<core::String>;
static method test12() → (core::num) → self::A<dynamic>
  return self::A::bar<core::num>;
static method main() → dynamic {}
