/*
 * 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 A factory is a constructor prefaced by the built-in identifier
 * factory.
 * factoryConstructorSignature:
 *   factory identifier ('.' identifier)? formalParameterList
 * ;
 * @description Checks that it is a compile-time error if a factory constructor
 * declaration has the dot but not the named constructor identifier that should
 * follow it.
 * @compile-error
 * @author iefremov
 */

class C {
  factory C.() = A;
}

class A implements C{}

main() {
  new C();
}
