// 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;
}
