// 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). It is a compile-time
 * error if T does not denote a class accessible in the current scope.
 * @description Checks that it is a compile-time error if T is a reference to
 * a static method.
 * @compile-error
 * @author msyabro
 */

class A {
  static method() {}
}

main() {
  const A.method();
}
