Clang Project

clang_source_code/test/SemaTemplate/stmt-expr.cpp
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).
5template <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.
15template <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
28template <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