repo.or.cz
/
official-gcc.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
* decl.c (make_typename_type): s/parameters/arguments/.
[official-gcc.git]
/
gcc
/
testsuite
/
g++.dg
/
cpp0x
/
decltype-call3.C
blob
27797a2fa314df928655eb380ac8791a2ec07537
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
}