1// RUN: %clang_cc1 -std=c++11 %s -verify
2
3int GlobalVar; // expected-note {{declared here}}
4
5namespace N {
6  int AmbiguousVar; // expected-note {{candidate}}
7}
8int AmbiguousVar; // expected-note {{candidate}}
9using namespace N;
10
11class 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
27void 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