library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
// Try changing type arguments so that they conform to the bounds.
//         ImplAlias<String>()
//         ^
// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
// typedef ImplAlias<T extends num> = _ConstImpl<T>;
//                   ^
//
import self as self;
import "dart:core" as core;

typedef Alias = self::Const;
typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
class Class extends core::Object {
  final field core::List<self::Const> constants;
  constructor •({core::List<self::Const> constants = #C3}) → self::Class
    : self::Class::constants = constants, super core::Object::•()
    ;
  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
    return new self::Class::•(constants: constants);
}
abstract class Const extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
  static factory impl() → self::Const
    return new self::_ConstImpl::•<dynamic>();
  static method _#impl#tearOff() → self::Const
    return new self::_ConstImpl::•<dynamic>();
}
class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
    : super core::Object::•()
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
}
static method main() → dynamic {}
static method _#ImplAlias#new#tearOff<T extends core::num>() → self::_ConstImpl<self::_#ImplAlias#new#tearOff::T>
  return new self::_ConstImpl::•<self::_#ImplAlias#new#tearOff::T>();

constants  {
  #C1 = self::_ConstImpl<dynamic> {}
  #C2 = self::_ConstImpl<core::String> {}
  #C3 = <self::Const>[#C1, #C1, #C2]
  #C4 = constructor-tearoff self::Const::impl
}


Constructor coverage from constants:
org-dartlang-testcase:///const_redirect.dart:
- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
