111
|
1 // { dg-do assemble }
|
|
2 // { dg-options "" }
|
|
3 // General test for operator overloading permissiveness.
|
|
4
|
|
5 typedef __SIZE_TYPE__ size_t;
|
|
6
|
|
7 struct A {
|
|
8 int operator?:(int a, int b); // { dg-error "expected type-specifier" }
|
131
|
9 static int operator()(int a); // { dg-error "14:.static int A::operator\\(\\)\\(int\\). must be a nonstatic member function" }
|
|
10 static int operator+(A,A); // { dg-error "14:.static int A::operator\\+\\(A, A\\). must be either a non-static member function or a non-member function" }
|
|
11 int operator+(int a, int b = 1); // { dg-error "7:.int A::operator\\+\\(int, int\\). must have either zero or one argument" }
|
|
12 int operator++(char); // { dg-error "7:postfix .int A::operator\\+\\+\\(char\\). must have .int. as its argument" }
|
111
|
13 void operator delete (void *);
|
|
14 void operator delete (void *, unsigned long);
|
|
15 };
|
|
16
|
|
17 struct B {
|
|
18 void * operator new (size_t, void *);
|
131
|
19 int operator++(int = 0); // { dg-error "7:.int B::operator\\+\\+\\(int\\). cannot have default arguments" }
|
111
|
20 int operator+ (int);
|
|
21 void operator()();
|
|
22 char * operator[](int);
|
|
23 B * operator->();
|
|
24 };
|
|
25
|
131
|
26 int operator-(int a, int b); // { dg-error "5:.int operator-\\(int, int\\). must have an argument of class or enumerated type" }
|
111
|
27
|
131
|
28 void * operator new (A a); // { dg-error ".operator new. takes type .size_t." }
|
|
29 void operator delete (A a); // { dg-error ".operator delete. takes type .void\\*. as first parameter" }
|
111
|
30
|
|
31 char * operator char * (int); // { dg-error "return type" "ret" }
|
131
|
32 // { dg-error "8:.operator char\\*\\*\\(int\\). must be a nonstatic member function" "mem" { target *-*-* } .-1 }
|