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 { target c++17 } }
// { dg-options "" }
// 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-message "" }
MAKE_FN (add, +); // { dg-message "" }
MAKE_FN (sub, -); // { dg-message "" }
MAKE_FN (mul, *); // { dg-message "" }
MAKE_FN (div, /); // { dg-message "" }
MAKE_FN (mod, %); // { dg-message "" }
MAKE_FN (bxor, ^); // { dg-message "" }
MAKE_FN (bor, |); // { dg-message "" }
MAKE_FN (band, &); // { dg-message "" }
MAKE_FN (lsh, <<); // { dg-message "" }
MAKE_FN (rsh, >>); // { dg-message "" }
MAKE_FN (assign, =); // { dg-message "" }
MAKE_FN (addi, +=); // { dg-message "" }
MAKE_FN (subi, -=); // { dg-message "" }
MAKE_FN (muli, *=); // { dg-message "" }
MAKE_FN (divi, /=); // { dg-message "" }
MAKE_FN (modi, %=); // { dg-message "" }
MAKE_FN (bxori, ^=); // { dg-message "" }
MAKE_FN (bori, |=); // { dg-message "" }
MAKE_FN (bandi, &=); // { dg-message "" }
MAKE_FN (lshi, <<=); // { dg-message "" }
MAKE_FN (rshi, >>=); // { dg-message "" }
MAKE_FN (eq, ==); // { dg-message "" }
MAKE_FN (ne, !=); // { dg-message "" }
MAKE_FN (lt, <); // { dg-message "" }
MAKE_FN (gt, >); // { dg-message "" }
MAKE_FN (le, <); // { dg-message "" }
MAKE_FN (ge, >); // { dg-message "" }
MAKE_FN (land, &&);
MAKE_FN (lor, ||);
MAKE_FN (comma, COMMA);
MAKE_FN (dot_star, .*); // { dg-message "" }
MAKE_FN (arrow_star, ->*); // { dg-message "" }
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 macro definition or expansion above.
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" }
}
|