blob: 6f85e909d703e3cfaacfa437b5d3473d872c1cbf [file] [log] [blame]
// 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.
// @dart = 2.9
/// @assertion A generic class declaration introduces a generic class into the
/// enclosing library scope. A generic class is a mapping that accepts a list of
/// actual type arguments and maps them to a class. Consider a generic class
/// declaration [G] named [C] with formal type parameter declarations [X1 extends
/// B1,..., Xm extends Bm], and a parameterized type [T] of the form
/// [C<T1,..., Tl>].
/// ...
/// It is a compile-time error if T is not well-bounded.
/// @description Checks that compile error is thrown for the case with one type
/// argument
/// @author iarkh@unipro.ru
class A<T> {}
class C<T extends C<T>> {}
main() {
A<int> a1;
A<C> a2;
A<C<Null>> a3;
A<C<dynamic>> a4;
A<C<int>> a5; //# 01: compile-time error
A<C<C<int>>> a6; //# 02: compile-time error
A<C<C<C<C<C<C<int>>>>>>> a7; //# 03: compile-time error
C<C<int>> c1; //# 04: compile-time error
C<C<C<int>>> c2; //# 05: compile-time error
C<C<C<C<C<C<C<int>>>>>>> c3; //# 06: compile-time error
}