| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // SharedOptions=--enable-experiment=variance | |
| import 'package:expect/expect.dart'; | |
| abstract class A<in X> { | |
| int foo(X bar); | |
| } | |
| class B<out X, in Y, inout Z> {} | |
| class C<in T> extends A<T> { | |
| @override | |
| int foo(T bar) { | |
| return 2; | |
| } | |
| } | |
| mixin D<out T> {} | |
| class E1 {} | |
| mixin E<in T extends E1> {} | |
| class F<out T> = Object with D<T>; | |
| main() { | |
| B<int, String, bool> b = B(); | |
| C<int> c = C(); | |
| Expect.equals(2, c.foo(3)); | |
| F<int> f = F(); | |
| } |