* call.c (remaining_arguments): No longer static.
* cp-tree.h: Declare it.
* pt.c (more_specialized_fn): Use it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233579
138bc75d-0d04-0410-961f-
82ee72b054a4
+2016-02-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/69743
+ * call.c (remaining_arguments): No longer static.
+ * cp-tree.h: Declare it.
+ * pt.c (more_specialized_fn): Use it.
+
2016-02-19 Jakub Jelinek <jakub@redhat.com>
Bernd Edlinger <bernd.edlinger@hotmail.de>
/* Return the number of remaining arguments in the parameter list
beginning with ARG. */
-static int
+int
remaining_arguments (tree arg)
{
int n;
extern bool type_has_extended_temps (tree);
extern tree strip_top_quals (tree);
extern bool reference_related_p (tree, tree);
+extern int remaining_arguments (tree);
extern tree perform_implicit_conversion (tree, tree, tsubst_flags_t);
extern tree perform_implicit_conversion_flags (tree, tree, tsubst_flags_t, int);
extern tree build_integral_nontype_arg_conv (tree, tree, tsubst_flags_t);
if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
{
- int i, len2 = list_length (args2);
+ int i, len2 = remaining_arguments (args2);
tree parmvec = make_tree_vec (1);
tree argvec = make_tree_vec (len2);
tree ta = args2;
}
else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
{
- int i, len1 = list_length (args1);
+ int i, len1 = remaining_arguments (args1);
tree parmvec = make_tree_vec (1);
tree argvec = make_tree_vec (len1);
tree ta = args1;
--- /dev/null
+// PR c++/69743
+// { dg-do compile { target c++11 } }
+
+template <typename D, typename... T>
+void f(int, T... d)
+{
+}
+
+template <typename D, typename... T>
+void f(T... d)
+{
+ f<D>(1, d...);
+}
+
+void g(void)
+{
+ f<long>(1.0);
+}