1 // { dg-do run  }
2 // GROUPS passed operators
3 // Check that operators may be (directly) recursive.
4 
5 extern "C" int printf (const char *, ...);
6 
7 struct base {
8 	int i;
9 };
10 
11 base base_variable;
12 
13 base operator+ (const base& left, const base& right)
14 {
15 	base ret_val;
16 
17 	ret_val.i = left.i + right.i;
18 	return ret_val;
19 }
20 
21 base operator- (const base& left, int right)
22 {
23 	base ret_val;
24 
25 	ret_val.i = left.i - right;
26 	return ret_val;
27 }
28 
29 // Define the unary ! operator for class base to be the fibonachi
30 // operator.
31 
32 base operator! (const base& right)
33 {
34 	if (right.i < 2)
35 		return right;
36 	else
37 		return ((!(right-1)) + (!(right-2)));
38 }
39 
main()40 int main ()
41 {
42 	base k;
43 
44 	k.i = 15;
45 	k = !k;		// fib it!
46 
47 	if (k.i != 610)
48 	  { printf ("FAIL\n"); return 1; }
49 	else
50 	  printf ("PASS\n");
51 
52 	return 0;
53 }
54