111
|
1 // Testcase for N3276 and operator overloading
|
|
2 // { dg-require-effective-target c++11 }
|
|
3
|
|
4 struct A;
|
|
5 struct B {
|
|
6 A operator()(int);
|
|
7 A operator[](int);
|
|
8 A operator=(int);
|
|
9 A operator+=(int);
|
|
10 A operator-=(int);
|
|
11 A operator*=(int);
|
|
12 A operator/=(int);
|
|
13 A operator^=(int);
|
|
14 A operator&=(int);
|
|
15 A operator|=(int);
|
|
16 A operator<<=(int);
|
|
17 A operator>>=(int);
|
|
18 };
|
|
19
|
|
20 A operator-(B);
|
|
21 A operator+(B);
|
|
22 A operator*(B);
|
|
23 A operator&(B);
|
|
24 A operator!(B);
|
|
25 A operator~(B);
|
|
26 A operator++(B);
|
|
27 A operator--(B);
|
|
28
|
|
29 A operator+(B,B);
|
|
30 A operator-(B,B);
|
|
31 A operator*(B,B);
|
|
32 A operator/(B,B);
|
|
33 A operator%(B,B);
|
|
34 A operator^(B,B);
|
|
35 A operator&(B,B);
|
|
36 A operator|(B,B);
|
|
37 A operator<(B,B);
|
|
38 A operator>(B,B);
|
|
39 A operator,(B,B);
|
|
40 A operator<<(B,B);
|
|
41 A operator>>(B,B);
|
|
42 A operator==(B,B);
|
|
43 A operator->*(B,B);
|
|
44
|
|
45 #define TRY(E) static_cast<decltype(E)*>(0)
|
|
46
|
|
47 template <class B>
|
|
48 void f()
|
|
49 {
|
|
50 B b;
|
|
51 TRY(b(0));
|
|
52 TRY(b[0]);
|
|
53 TRY(b=0);
|
|
54 TRY(b+=0);
|
|
55 TRY(b-=0);
|
|
56 TRY(b*=0);
|
|
57 TRY(b/=0);
|
|
58 TRY(b^=0);
|
|
59 TRY(b&=0);
|
|
60 TRY(b|=0);
|
|
61 TRY(b<<=0);
|
|
62 TRY(b>>=0);
|
|
63
|
|
64 TRY(-b);
|
|
65 TRY(+b);
|
|
66 TRY(*b);
|
|
67 TRY(&b);
|
|
68 TRY(!b);
|
|
69 TRY(~b);
|
|
70 TRY(++b);
|
|
71 TRY(--b);
|
|
72
|
|
73 TRY(b+b);
|
|
74 TRY(b-b);
|
|
75 TRY(b*b);
|
|
76 TRY(b/b);
|
|
77 TRY(b%b);
|
|
78 TRY(b^b);
|
|
79 TRY(b&b);
|
|
80 TRY(b|b);
|
|
81 TRY(b>b);
|
|
82 TRY(b<b);
|
|
83 TRY((b,b));
|
|
84 TRY(b<<b);
|
|
85 TRY(b>>b);
|
|
86 TRY(b==b);
|
|
87 TRY(b->*b);
|
|
88 }
|
|
89
|
|
90 int main()
|
|
91 {
|
|
92 B b;
|
|
93 TRY(b(0));
|
|
94 TRY(b[0]);
|
|
95 TRY(b=0);
|
|
96 TRY(b+=0);
|
|
97 TRY(b-=0);
|
|
98 TRY(b*=0);
|
|
99 TRY(b/=0);
|
|
100 TRY(b^=0);
|
|
101 TRY(b&=0);
|
|
102 TRY(b|=0);
|
|
103 TRY(b<<=0);
|
|
104 TRY(b>>=0);
|
|
105
|
|
106 TRY(-b);
|
|
107 TRY(+b);
|
|
108 TRY(*b);
|
|
109 TRY(&b);
|
|
110 TRY(!b);
|
|
111 TRY(~b);
|
|
112 TRY(++b);
|
|
113 TRY(--b);
|
|
114
|
|
115 TRY(b+b);
|
|
116 TRY(b-b);
|
|
117 TRY(b*b);
|
|
118 TRY(b/b);
|
|
119 TRY(b%b);
|
|
120 TRY(b^b);
|
|
121 TRY(b&b);
|
|
122 TRY(b|b);
|
|
123 TRY(b>b);
|
|
124 TRY(b<b);
|
|
125 TRY((b,b));
|
|
126 TRY(b<<b);
|
|
127 TRY(b>>b);
|
|
128 TRY(b==b);
|
|
129 TRY(b->*b);
|
|
130
|
|
131 f<B>();
|
|
132 }
|