| // RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++20 |
| |
| void foo() { |
| void fn(int i, int = ({ 1; })); // expected-error {{default argument may not use a GNU statement expression}} |
| |
| auto a = [](int = ({ 1; })) {}; // expected-error {{default argument may not use a GNU statement expression}} |
| |
| auto b = []<int = ({ 1; })>(){}; // expected-error {{default non-type template argument may not use a GNU statement expression}} |
| |
| void fn(int i, int j = ({{}, {}, {,}}), int k = ""); // expected-error {{default argument may not use a GNU statement expression}} expected-error {{cannot initialize a parameter of type 'int' with an lvalue of type 'const char[1]'}} expected-note {{passing argument to parameter 'k' here}} |
| } |
| |
| template <int foo = ({ 1; })> // expected-error {{default non-type template argument may not use a GNU statement expression}} |
| void f() {} |
| |
| template <int bar = ({ 1; })> // expected-error {{default non-type template argument may not use a GNU statement expression}} |
| class S {}; |
| |
| template <typename Callable> |
| int bar(Callable &&Call) { |
| return Call(); |
| } |
| |
| int baz() { |
| auto l = [](int a = ({ int x = 12; x; })) { // expected-error {{default argument may not use a GNU statement expression}} |
| return 1; |
| }; |
| return bar(l); |
| } |