+2009-06-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/40595
+ * pt.c (tsubst_pack_expansion): Handle unexpanded packs in an
+ EXPR_PACK_EXPANSION.
+
2009-06-29 Jason Merrill <jason@redhat.com>
PR c++/40274
and return a PACK_EXPANSION_*. The caller will need to deal with
that. */
if (unsubstituted_packs)
- return make_pack_expansion (tsubst (pattern, args, complain,
- in_decl));
+ {
+ tree new_pat;
+ if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
+ new_pat = tsubst_expr (pattern, args, complain, in_decl,
+ /*integral_constant_expression_p=*/false);
+ else
+ new_pat = tsubst (pattern, args, complain, in_decl);
+ return make_pack_expansion (new_pat);
+ }
/* We could not find any argument packs that work. */
if (len < 0)
+2009-06-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/40595
+ * g++.dg/cpp0x/variadic94.C: New.
+
2009-06-30 Richard Sandiford <r.sandiford@uk.ibm.com>
* lib/gcc-defs.exp (gcc-set-multilib-library-path): Delete.
--- /dev/null
+// PR c++/40595
+// { dg-options "-std=c++0x" }
+
+template<int N>
+struct S
+{
+ typedef int type;
+};
+
+template<typename T>
+struct Get
+{
+ static T get();
+};
+
+template<typename F>
+struct B
+{
+ template<typename ... Args>
+ typename S<sizeof( Get<F>::get() (Get<Args>::get() ...) )>::type
+ f(Args&& ... a);
+};
+
+struct X
+{
+ bool operator()(int) const;
+};
+
+int main()
+{
+ B<X> b;
+ b.f(1);
+}