mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
6eb9b9e593
We could in principle support such pack expansion, using techniques similar to what we do for pack expansion of lambdas, but it's not clear it's worthwhile. For now at least, cleanly reject these cases rather than crashing. llvm-svn: 324160
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;
|
|
} ...
|
|
};
|
|
});
|
|
}
|