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