diff options
Diffstat (limited to 'test/CXX/basic/basic.lookup/basic.lookup.argdep/p2-inline-namespace.cpp')
-rw-r--r-- | test/CXX/basic/basic.lookup/basic.lookup.argdep/p2-inline-namespace.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2-inline-namespace.cpp b/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2-inline-namespace.cpp new file mode 100644 index 0000000000..19054f6415 --- /dev/null +++ b/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2-inline-namespace.cpp @@ -0,0 +1,56 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s + +// C++11 [basic.lookup.argdep]p2 +// +// [...] If an associated namespace is an inline namespace (10.3.1), its +// enclosing namespace is also included in the set. If an associated +// namespace directly contains inline namespaces, those inline namespaces +// are also included in the set. + +namespace test1 { + namespace L { + namespace M { + inline namespace N { + inline namespace O { + struct S {}; + void f1(S); + } + void f2(S); + } + void f3(S); + } + void f4(M::S); // expected-note {{declared here}} + } + + void test() { + L::M::S s; + f1(s); // ok + f2(s); // ok + f3(s); // ok + f4(s); // expected-error {{use of undeclared}} + } +} + +namespace test2 { + namespace L { + struct S {}; + inline namespace M { + inline namespace N { + inline namespace O { + void f1(S); + } + void f2(S); + } + void f3(S); + } + void f4(S); + } + + void test() { + L::S s; + f1(s); // ok + f2(s); // ok + f3(s); // ok + f4(s); // ok + } +} |