1// { dg-do assemble  }
2// { dg-options "" }
3// General test for operator overloading permissiveness.
4
5typedef __SIZE_TYPE__ size_t;
6
7struct A {
8  int operator?:(int a, int b);	   // { dg-warning "" }
9  static int operator()(int a);	   // { dg-error "" } must be nonstatic
10  static int operator+(A,A);	   // { dg-error "" } must be nonstatic
11  int operator+(int a, int b = 1); // { dg-error "" } two errors on this line
12  int operator++(char);		   // { dg-error "" } must take 'int'
13  void operator delete (void *);
14  void operator delete (void *, unsigned long);
15};
16
17struct B {
18  void * operator new (size_t, void *);
19  int operator++(int = 0);
20  int operator+ (int);
21  void operator()();
22  char * operator[](int);
23  B * operator->();
24};
25
26int operator-(int a, int b);	// { dg-error "" } no class argument
27
28void * operator new (A a);	// { dg-error "" } invalid first argument
29void operator delete (A a);	// { dg-error "" } ditto
30
31char * operator char * (int);	// { dg-error "" } return value, nonmember
32