40 lines
912 B
C++
40 lines
912 B
C++
// RUN: %clang_cc1 -verify %s
|
|
|
|
// FIXME: We could in principle support cases like this (particularly, cases
|
|
// where the statement-expression contains no labels).
|
|
template <typename... T> void f1() {
|
|
int arr[] = {
|
|
({
|
|
T(); // expected-error {{unexpanded parameter pack}}
|
|
}) ... // expected-error {{does not contain any unexpanded parameter packs}}
|
|
};
|
|
}
|
|
|
|
// FIXME: The error for this isn't ideal; it'd be preferable to say that pack
|
|
// expansion of a statement expression is not permitted.
|
|
template <typename... T> void f2() {
|
|
[] {
|
|
int arr[] = {
|
|
T() + ({
|
|
foo:
|
|
T t; // expected-error {{unexpanded parameter pack}}
|
|
goto foo;
|
|
0;
|
|
}) ...
|
|
};
|
|
};
|
|
}
|
|
|
|
template <typename... T> void f3() {
|
|
({
|
|
int arr[] = {
|
|
[] {
|
|
foo:
|
|
T t; // OK, expanded within compound statement
|
|
goto foo;
|
|
return 0;
|
|
} ...
|
|
};
|
|
});
|
|
}
|