// Copyright (c) 2017, 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.

// @dart = 2.9

import "package:expect/expect.dart";

typedef U F<T, U>(T x);

class C<T> {
  T f(List<T> x) {}
}

F<List<num>, num> g(C<num> c) {
  return c.f;
}

void main() {
  var tearoff = g(new C<int>());
  // Since C.f's x parameter is covariant, its type is changed to `Object?` when
  // determining the type of the tearoff.  So the type of the tearoff should be
  // `(Object?) -> int`.  (Not, for example, `(List<Object?>) -> int` or
  // `(List<Object?>) -> Object?`)
  Expect.isTrue(tearoff is F<Object, int>);
  // Because the function accepts any object, we can pass strings to it.  This
  // will not work in Dart 1.
  Expect.isTrue(tearoff is F<String, int>);
}
