// 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 msyabro


class S<U> {
  const S();
}

class A<T> {
  test() {
    const S<T>(); //type variable as a type argument
//          ^
// [analyzer]unspecified
// [cfe]unspecified
  }
}

main() {
  A<int>();
}
