| void main() {} |
| |
| class AssertIdentical { |
| const AssertIdentical(Object? v1, Object? v2) |
| : assert(identical(v1, v2), "${(v1, v2)}"); |
| const AssertIdentical.not(Object? v1, Object? v2) |
| : assert(!identical(v1, v2), "${(v1, v2)}"); |
| } |
| |
| class C<T> { |
| final T value; |
| C(this.value); |
| C.named(this.value); |
| C.redirect(T value) : this.named(value); |
| factory C.factory(T value) => C<T>(value); |
| factory C.factoryRedirect(T value) = C<T>; |
| } |
| |
| typedef ACI = C<int>; |
| |
| typedef ACR<T> = C<T>; |
| |
| typedef ACN<T extends num> = C<T>; |
| |
| void checkClass() {} |
| |
| extension type E<T>(T value) { |
| E.named(this.value); |
| E.redirect(T value) : this.named(value); |
| factory E.factory(T value) => E<T>(value); |
| factory E.factoryRedirect(T value) = E<T>; |
| } |
| |
| typedef AEI = E<int>; |
| |
| typedef AER<T> = E<T>; |
| |
| typedef AEN<T extends num> = E<T>; |
| |
| void checkExtensionType() {} |