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

class M<U extends V, V> {}

class N<U, V extends U> {}

class S<T> {}

class MNA<U, V extends U, W> extends S<List<U>>
    with M<V, U>, N<List<W>, List<W>> {}

class MNA2<U, V extends U, W> = S<List<U>> with M<V, U>, N<List<W>, List<W>>;

main() {
  new MNA<num, int, bool>();
  new MNA2<num, int, bool>();

  // Type parameter U of M must extend type parameter V, but
  // type argument num is not a subtype of int.
  new MNA<int, num, bool>();
  //  ^
  // [cfe] Type argument 'num' doesn't conform to the bound 'U' of the type variable 'V' on 'MNA'.
  //           ^^^
  // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS

  // Type parameter U of M must extend type parameter V, but
  // type argument num is not a subtype of int.
  new MNA2<int, num, bool>();
  //  ^
  // [cfe] Type argument 'num' doesn't conform to the bound 'U' of the type variable 'V' on 'MNA2'.
  //            ^^^
  // [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
}
