1*6eb9b9e5SRichard Smith // RUN: %clang_cc1 -verify %s 2*6eb9b9e5SRichard Smith 3*6eb9b9e5SRichard Smith // FIXME: We could in principle support cases like this (particularly, cases 4*6eb9b9e5SRichard Smith // where the statement-expression contains no labels). f1()5*6eb9b9e5SRichard Smithtemplate <typename... T> void f1() { 6*6eb9b9e5SRichard Smith int arr[] = { 7*6eb9b9e5SRichard Smith ({ 8*6eb9b9e5SRichard Smith T(); // expected-error {{unexpanded parameter pack}} 9*6eb9b9e5SRichard Smith }) ... // expected-error {{does not contain any unexpanded parameter packs}} 10*6eb9b9e5SRichard Smith }; 11*6eb9b9e5SRichard Smith } 12*6eb9b9e5SRichard Smith 13*6eb9b9e5SRichard Smith // FIXME: The error for this isn't ideal; it'd be preferable to say that pack 14*6eb9b9e5SRichard Smith // expansion of a statement expression is not permitted. f2()15*6eb9b9e5SRichard Smithtemplate <typename... T> void f2() { 16*6eb9b9e5SRichard Smith [] { 17*6eb9b9e5SRichard Smith int arr[] = { 18*6eb9b9e5SRichard Smith T() + ({ 19*6eb9b9e5SRichard Smith foo: 20*6eb9b9e5SRichard Smith T t; // expected-error {{unexpanded parameter pack}} 21*6eb9b9e5SRichard Smith goto foo; 22*6eb9b9e5SRichard Smith 0; 23*6eb9b9e5SRichard Smith }) ... 24*6eb9b9e5SRichard Smith }; 25*6eb9b9e5SRichard Smith }; 26*6eb9b9e5SRichard Smith } 27*6eb9b9e5SRichard Smith f3()28*6eb9b9e5SRichard Smithtemplate <typename... T> void f3() { 29*6eb9b9e5SRichard Smith ({ 30*6eb9b9e5SRichard Smith int arr[] = { 31*6eb9b9e5SRichard Smith [] { 32*6eb9b9e5SRichard Smith foo: 33*6eb9b9e5SRichard Smith T t; // OK, expanded within compound statement 34*6eb9b9e5SRichard Smith goto foo; 35*6eb9b9e5SRichard Smith return 0; 36*6eb9b9e5SRichard Smith } ... 37*6eb9b9e5SRichard Smith }; 38*6eb9b9e5SRichard Smith }); 39*6eb9b9e5SRichard Smith } 40