// Copyright (c) 2011, 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 Let e be a constant object expression of the form
 * const T.id(a1, .., an, xn+1: an+1, …, xn+k: an+k) or the form
 * const T(a1, .., an, xn+1: an+1, …, xn+k: an+k).
 * If T is a parameterized type, it is a compile-time error if T includes
 * a type variable among its type arguments.
 * @description Checks that it is an error if T includes any type parameters as
 * a type argument.
 * @issue 27492
 * @author kaigorodov
 */

class S<U> {
  const S.named();
}

class A<T> {
  test() {
    const S<T>.named(); //type variable as a type argument
//          ^
// [analyzer]unspecified
// [cfe]unspecified
  }
}

main() {
  new A<int>().test();
}
