// 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.

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>);
}
