1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2 
3 // C++11 [basic.lookup.argdep]p2
4 //
5 // [...] If an associated namespace is an inline namespace (10.3.1), its
6 // enclosing namespace is also included in the set. If an associated
7 // namespace directly contains inline namespaces, those inline namespaces
8 // are also included in the set.
9 
10 namespace test1 {
11   namespace L {
12     namespace M {
13       inline namespace N {
14         inline namespace O {
15           struct S {};
16           void f1(S);
17         }
18         void f2(S);
19       }
20       void f3(S);
21     }
22     void f4(M::S); // expected-note {{declared here}}
23   }
24 
test()25   void test() {
26     L::M::S s;
27     f1(s); // ok
28     f2(s); // ok
29     f3(s); // ok
30     f4(s); // expected-error {{use of undeclared}}
31   }
32 }
33 
34 namespace test2 {
35   namespace L {
36     struct S {};
37     inline namespace M {
38       inline namespace N {
39         inline namespace O {
40           void f1(S);
41         }
42         void f2(S);
43       }
44       void f3(S);
45     }
46     void f4(S);
47   }
48 
test()49   void test() {
50     L::S s;
51     f1(s); // ok
52     f2(s); // ok
53     f3(s); // ok
54     f4(s); // ok
55   }
56 }
57