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

Reply via email to