1*8a4d388cSJun Zhang // RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++20 2*8a4d388cSJun Zhang foo()3*8a4d388cSJun Zhangvoid foo() { 4*8a4d388cSJun Zhang void fn(int i, int = ({ 1; })); // expected-error {{default argument may not use a GNU statement expression}} 5*8a4d388cSJun Zhang 6*8a4d388cSJun Zhang auto a = [](int = ({ 1; })) {}; // expected-error {{default argument may not use a GNU statement expression}} 7*8a4d388cSJun Zhang 8*8a4d388cSJun Zhang auto b = []<int = ({ 1; })>(){}; // expected-error {{default non-type template argument may not use a GNU statement expression}} 9*8a4d388cSJun Zhang 10*8a4d388cSJun Zhang 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}} 11*8a4d388cSJun Zhang } 12*8a4d388cSJun Zhang 13*8a4d388cSJun Zhang template <int foo = ({ 1; })> // expected-error {{default non-type template argument may not use a GNU statement expression}} f()14*8a4d388cSJun Zhangvoid f() {} 15*8a4d388cSJun Zhang 16*8a4d388cSJun Zhang template <int bar = ({ 1; })> // expected-error {{default non-type template argument may not use a GNU statement expression}} 17*8a4d388cSJun Zhang class S {}; 18*8a4d388cSJun Zhang 19*8a4d388cSJun Zhang template <typename Callable> bar(Callable && Call)20*8a4d388cSJun Zhangint bar(Callable &&Call) { 21*8a4d388cSJun Zhang return Call(); 22*8a4d388cSJun Zhang } 23*8a4d388cSJun Zhang baz()24*8a4d388cSJun Zhangint baz() { 25*8a4d388cSJun Zhang auto l = [](int a = ({ int x = 12; x; })) { // expected-error {{default argument may not use a GNU statement expression}} 26*8a4d388cSJun Zhang return 1; 27*8a4d388cSJun Zhang }; 28*8a4d388cSJun Zhang return bar(l); 29*8a4d388cSJun Zhang } 30