rtrieu added a comment. This seems to be acting weird in template instantations. Here's an example where the lambda only errors inside a template.
template <class> int foo(int x = 0) { auto lambda = [x = x+1]() -> decltype(x) { return x; }; return -1; } // no template int bar(int x = 0) { auto lambda = [x = x+1]() -> decltype(x) { return x; }; return -1; } int a = foo<int>(); // error int b = bar(); // no error /tmp/lambda.cc:4:16: error: variable 'x' cannot be implicitly captured in a lambda with no capture-default specified return x; ^ /tmp/lambda.cc:17:9: note: in instantiation of function template specialization 'foo<int>' requested here int a = foo<int>(); // error ^ /tmp/lambda.cc:3:20: note: 'x' declared here auto lambda = [x = x+1]() -> decltype(x) { ^ /tmp/lambda.cc:3:19: note: lambda expression begins here auto lambda = [x = x+1]() -> decltype(x) { ^ /tmp/lambda.cc:3:27: note: capture 'x' by value auto lambda = [x = x+1]() -> decltype(x) { ^ , x /tmp/lambda.cc:3:27: note: capture 'x' by reference auto lambda = [x = x+1]() -> decltype(x) { ^ , &x /tmp/lambda.cc:3:20: note: default capture by value auto lambda = [x = x+1]() -> decltype(x) { ^ =, /tmp/lambda.cc:3:20: note: default capture by reference auto lambda = [x = x+1]() -> decltype(x) { ^ &, 1 error generated. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D119136/new/ https://reviews.llvm.org/D119136 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits