[PATCH] D36915: [Sema] Diagnose local variables and parameters captured by lambda and block expressions in a default argument

Akira Hatanaka via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 28 11:14:09 PDT 2017


ahatanak added a comment.

In https://reviews.llvm.org/D36915#849622, @faisalv wrote:

> I don't think this approach is entirely correct for at least the following reasons:
>
> 1. in the lambda case the machinery that diagnoses capture failures should be the machinery erroring on the lambda (when the parameter is odr-used)


Does this mean that it is OK to have a parameter or local variable appear in a potentially-evaluated expression as long as it is not odr-used? I think this is slightly different from the standard, which says a parameter or local variable cannot appear as a potentially-evaluated expression in a default argument.

For example:

  void foo2(int);
  
  void func() {
    const int a = 1;
    void foo1(S s = [](){ foo2(a); }); // "a" is not in an unevaluated context and is not odr-used.
  }

I think I need clarification as it will affect how or where we detect this error.


https://reviews.llvm.org/D36915





More information about the cfe-commits mailing list