blob: 787bf792be9b08c9bfad7b6145b4d700bb9bcc51 [file] [log] [blame]
// { 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-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" }
}