P0036R0: Unary Folds and Empty Parameter Packs

* pt.c (expand_empty_fold): Remove special cases for *,+,&,|.

From-SVN: r234068
This commit is contained in:
Jason Merrill 2016-03-08 17:30:30 -05:00 committed by Jason Merrill
parent d259b234a3
commit 1e546b68c1
4 changed files with 11 additions and 18 deletions

View File

@ -1,3 +1,8 @@
2016-03-08 Jason Merrill <jason@redhat.com>
P0036R0: Unary Folds and Empty Parameter Packs
* pt.c (expand_empty_fold): Remove special cases for *,+,&,|.
2016-03-08 Jakub Jelinek <jakub@redhat.com>
PR c++/70135

View File

@ -10629,10 +10629,6 @@ gen_elem_of_pack_expansion_instantiation (tree pattern,
sequence, the value of the expression is as follows; the program is
ill-formed if the operator is not listed in this table.
* 1
+ 0
& -1
| 0
&& true
|| false
, void() */
@ -10644,14 +10640,6 @@ expand_empty_fold (tree t, tsubst_flags_t complain)
if (!FOLD_EXPR_MODIFY_P (t))
switch (code)
{
case MULT_EXPR:
return integer_one_node;
case PLUS_EXPR:
return integer_zero_node;
case BIT_AND_EXPR:
return integer_minus_one_node;
case BIT_IOR_EXPR:
return integer_zero_node;
case TRUTH_ANDIF_EXPR:
return boolean_true_node;
case TRUTH_ORIF_EXPR:

View File

@ -22,11 +22,11 @@ MAKE_FNS (add, +);
MAKE_FNS (sub, -);
int main() {
assert(unary_left_add() == 0);
// assert(unary_left_add() == 0);
assert(unary_left_add(1) == 1);
assert(unary_left_add(1, 2, 3) == 6);
assert(unary_right_add() == 0);
// assert(unary_right_add() == 0);
assert(unary_right_add(1) == 1);
assert(unary_right_add(1, 2, 3) == 6);

View File

@ -47,16 +47,16 @@ MAKE_FN (dot_star, .*);
MAKE_FN (arrow_star, ->*);
int main() {
static_assert(add() == int(), "");
static_assert(mul() == 1, "");
static_assert(bor() == int(), "");
static_assert(band() == -1, "");
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" }