/*
 * 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.
 */
/**
 * @assertion If both the extension and the method is generic, then inference
 * must infer the extension type parameters first, to figure out whether the
 * extension applies, and only then start inferring method type parameters. As
 * mentioned above, the inference is similar to other cases of chained inference.
 * @description Check that compile error is thrown if extension type variable is
 * higher order.
 * @compile-error
 * @author iarkh@unipro.ru
 */


extension IncorrectExtension<T1, T2> on T1<T2> {
  void testme() {}
}

main() {
}
