Home | History | Annotate | Download | only in expr.prim.lambda
      1 // RUN: %clang_cc1 -std=c++11 %s -verify
      2 
      3 int GlobalVar; // expected-note {{declared here}}
      4 
      5 namespace N {
      6   int AmbiguousVar; // expected-note {{candidate}}
      7 }
      8 int AmbiguousVar; // expected-note {{candidate}}
      9 using namespace N;
     10 
     11 class X0 {
     12   int Member;
     13 
     14   static void Overload(int);
     15   void Overload();
     16   virtual X0& Overload(float);
     17 
     18   void explicit_capture() {
     19     int variable; // expected-note {{declared here}}
     20     (void)[&Overload] () {}; // expected-error {{does not name a variable}}
     21     (void)[&GlobalVar] () {}; // expected-error {{does not have automatic storage duration}}
     22     (void)[&AmbiguousVar] () {}; // expected-error {{reference to 'AmbiguousVar' is ambiguous}}
     23     (void)[&Variable] () {}; // expected-error {{use of undeclared identifier 'Variable'; did you mean 'variable'}}
     24   }
     25 };
     26 
     27 void test_reaching_scope() {
     28   int local; // expected-note{{declared here}}
     29   static int local_static; // expected-note{{'local_static' declared here}}
     30   (void)[=]() {
     31     struct InnerLocal {
     32       void member() {
     33         (void)[local, // expected-error{{reference to local variable 'local' declared in enclosing function 'test_reaching_scope'}}
     34                local_static]() { // expected-error{{'local_static' cannot be captured because it does not have automatic storage duration}}
     35           return 0;
     36         };
     37       }
     38     };
     39   };
     40 }
     41