The fold-expressions code was improperly using unknown_type_node, which means unresolved overload; an expression whose type is unknown due to type-dependence should have null type.
Tested x86_64-pc-linux-gnu, applying to trunk.
commit e0fecc36cbee5afb56837b883d4091d180b880b5 Author: Jason Merrill <ja...@redhat.com> Date: Fri Feb 10 12:51:59 2017 -0500 PR c++/71285 - member of fold-expression * semantics.c (finish_unary_fold_expr) (finish_binary_fold_expr): Use null type for fold-expressions. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index e9fc4aa..6a47476 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -9437,7 +9437,7 @@ finish_unary_fold_expr (tree expr, int op, tree_code dir) // Build the fold expression. tree code = build_int_cstu (integer_type_node, abs (op)); - tree fold = build_min (dir, unknown_type_node, code, pack); + tree fold = build_min_nt_loc (UNKNOWN_LOCATION, dir, code, pack); FOLD_EXPR_MODIFY_P (fold) = (op < 0); return fold; } @@ -9463,7 +9463,7 @@ finish_binary_fold_expr (tree pack, tree init, int op, tree_code dir) { pack = make_pack_expansion (pack); tree code = build_int_cstu (integer_type_node, abs (op)); - tree fold = build_min (dir, unknown_type_node, code, pack, init); + tree fold = build_min_nt_loc (UNKNOWN_LOCATION, dir, code, pack, init); FOLD_EXPR_MODIFY_P (fold) = (op < 0); return fold; } diff --git a/gcc/testsuite/g++.dg/cpp1z/fold9.C b/gcc/testsuite/g++.dg/cpp1z/fold9.C new file mode 100644 index 0000000..578b8d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/fold9.C @@ -0,0 +1,12 @@ +// PR c++/71285 +// { dg-options -std=c++1z } + +template<typename... Args> +void spurious(Args... args) +{ + (... + args).member; +} + +int main() +{ +}