1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
// { dg-do compile }
// { dg-options "-std=c++1z" }
// Check that empty expansions and required failures.
#define COMMA ,
#define MAKE_FN(name, op) \
template<typename... Ts> \
constexpr auto name (Ts... ts) { return (... op ts); } // { dg-error "empty" }
MAKE_FN (add, +);
MAKE_FN (sub, -);
MAKE_FN (mul, *);
MAKE_FN (div, /);
MAKE_FN (mod, %);
MAKE_FN (bxor, ^);
MAKE_FN (bor, |);
MAKE_FN (band, &);
MAKE_FN (lsh, <<);
MAKE_FN (rsh, >>);
MAKE_FN (assign, =);
MAKE_FN (addi, +=);
MAKE_FN (subi, -=);
MAKE_FN (muli, *=);
MAKE_FN (divi, /=);
MAKE_FN (modi, %=);
MAKE_FN (bxori, ^=);
MAKE_FN (bori, |=);
MAKE_FN (bandi, &=);
MAKE_FN (lshi, <<=);
MAKE_FN (rshi, >>=);
MAKE_FN (eq, ==);
MAKE_FN (ne, !=);
MAKE_FN (lt, <);
MAKE_FN (gt, >);
MAKE_FN (le, <);
MAKE_FN (ge, >);
MAKE_FN (land, &&);
MAKE_FN (lor, ||);
MAKE_FN (comma, COMMA);
MAKE_FN (dot_star, .*);
MAKE_FN (arrow_star, ->*);
int main() {
static_assert(land() == true, "");
static_assert(lor() == false, "");
comma(); // No value to theck
// These are all errors, but the error is emitted at the point
// of instantiation (line 10).
add(); // { dg-message "required from here" }
mul(); // { dg-message "required from here" }
bor(); // { dg-message "required from here" }
band(); // { dg-message "required from here" }
sub(); // { dg-message "required from here" }
div(); // { dg-message "required from here" }
mod(); // { dg-message "required from here" }
lsh(); // { dg-message "required from here" }
rsh(); // { dg-message "required from here" }
assign(); // { dg-message "required from here" }
addi(); // { dg-message "required from here" }
subi(); // { dg-message "required from here" }
muli(); // { dg-message "required from here" }
divi(); // { dg-message "required from here" }
modi(); // { dg-message "required from here" }
bxor(); // { dg-message "required from here" }
bxori(); // { dg-message "required from here" }
bori(); // { dg-message "required from here" }
bandi(); // { dg-message "required from here" }
lshi(); // { dg-message "required from here" }
rshi(); // { dg-message "required from here" }
eq(); // { dg-message "required from here" }
ne(); // { dg-message "required from here" }
lt(); // { dg-message "required from here" }
gt(); // { dg-message "required from here" }
le(); // { dg-message "required from here" }
ge(); // { dg-message "required from here" }
dot_star(); // { dg-message "required from here" }
arrow_star(); // { dg-message "required from here" }
}
|