// 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
 * operatorSignature: 
 *   returnType? operator operator formalParameterList 
 * ;
 * operator: 
 *   ‘˜’ |
 *   binaryOperator | 
 *   ‘[’ ‘]’ |
 *   ‘[’ ‘]’ ‘=’
 * ;
 * binaryOperator: 
 *   multiplicativeOperator | 
 *   additiveOperator | 
 *   shiftOperator |
 *   relationalOperator | 
 *   ‘==’ |
 *   bitwiseOperator 
 * ;
 * @description Checks that any return type (including function type, type 
 * parameter, void or no return type at all) can be specified for any operator.
 * @author iefremov
 */

typedef int foo(double d);

class C<T> {
  int operator +(var v) => 42;
  List operator [](var v) => [];
  operator -() {}
  operator -(var v) {}
  operator []=(var v, var v2) {}
  dynamic operator ~() {}
  foo operator *(var v) => (double s) => 42;
  T operator >(T t) => t;
}

main() {
  C c = new C();
  dynamic x = c + c;
  x = c - c;
  x = c[c];
  c[c] = c;
  -c;
  x = ~c;
  x = c == c;
}
