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

/// @assertion These grammar changes allows type parameters without following
/// parenthesized arguments in places where we previously did not allow them.
/// For example, this means that <typeArguments> becomes a selector by itself,
/// not just followed by arguments.
///
/// It applies to instance methods as well as local, static and top-level
/// function declarations. For instance methods, it applies to references of the
/// form
///
/// instanceMethod<int> (with implicit this),
/// object.instanceMethod<int> (including this) and super.instanceMethod<int>.
///
/// @description Checks tear-off of generic instance method
/// @author sgrekhov@unipro.ru

// SharedOptions=--enable-experiment=constructor-tearoffs

class C {
  static T staticMethod<T>(T t) => t;
}

main() {
  var x = C.staticMethod<int>;
  x(3.14);
//  ^^^^
// [analyzer] unspecified
// [cfe] unspecified
  x<double>(42);
// ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
