diff options
Diffstat (limited to 'test/SemaTemplate/stmt-expr.cpp')
-rw-r--r-- | test/SemaTemplate/stmt-expr.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/SemaTemplate/stmt-expr.cpp b/test/SemaTemplate/stmt-expr.cpp new file mode 100644 index 0000000000000..2516a5220c1a7 --- /dev/null +++ b/test/SemaTemplate/stmt-expr.cpp @@ -0,0 +1,39 @@ +// 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; + } ... + }; + }); +} |