xref: /llvm-project/clang/test/ASTMerge/namespace/Inputs/namespace2.cpp (revision 0333dd95636da52229ca14b4e5525c1cd8ba62d2)
1*0333dd95SReid Kleckner // Merge success
2*0333dd95SReid Kleckner namespace N1 {
3*0333dd95SReid Kleckner   extern int x0;
4*0333dd95SReid Kleckner }
5*0333dd95SReid Kleckner 
6*0333dd95SReid Kleckner // Merge multiple namespaces
7*0333dd95SReid Kleckner namespace N2 {
8*0333dd95SReid Kleckner   extern int x;
9*0333dd95SReid Kleckner }
10*0333dd95SReid Kleckner namespace N2 {
11*0333dd95SReid Kleckner   extern float y;
12*0333dd95SReid Kleckner }
13*0333dd95SReid Kleckner 
14*0333dd95SReid Kleckner // Merge namespace with conflict
15*0333dd95SReid Kleckner namespace N3 {
16*0333dd95SReid Kleckner   extern double z;
17*0333dd95SReid Kleckner }
18*0333dd95SReid Kleckner 
19*0333dd95SReid Kleckner namespace Enclosing {
20*0333dd95SReid Kleckner namespace Nested {
21*0333dd95SReid Kleckner   const int z = 4;
22*0333dd95SReid Kleckner }
23*0333dd95SReid Kleckner }
24*0333dd95SReid Kleckner 
25*0333dd95SReid Kleckner namespace ContainsInline {
26*0333dd95SReid Kleckner   inline namespace Inline {
27*0333dd95SReid Kleckner     const int z = 10;
28*0333dd95SReid Kleckner   }
29*0333dd95SReid Kleckner }
30*0333dd95SReid Kleckner 
31*0333dd95SReid Kleckner namespace TestAliasName = Enclosing::Nested;
32*0333dd95SReid Kleckner // NOTE: There is no warning on this alias.
33*0333dd95SReid Kleckner namespace AliasWithSameName = Enclosing::Nested;
34*0333dd95SReid Kleckner 
35*0333dd95SReid Kleckner namespace TestUsingDecls {
36*0333dd95SReid Kleckner 
37*0333dd95SReid Kleckner namespace A {
38*0333dd95SReid Kleckner void foo();
39*0333dd95SReid Kleckner }
40*0333dd95SReid Kleckner namespace B {
41*0333dd95SReid Kleckner using A::foo; // <- a UsingDecl creating a UsingShadow
42*0333dd95SReid Kleckner }
43*0333dd95SReid Kleckner 
44*0333dd95SReid Kleckner }// end namespace TestUsingDecls
45*0333dd95SReid Kleckner 
46*0333dd95SReid Kleckner namespace TestUnresolvedTypenameAndValueDecls {
47*0333dd95SReid Kleckner 
48*0333dd95SReid Kleckner template <class T> class Base;
49*0333dd95SReid Kleckner template <class T> class Derived : public Base<T> {
50*0333dd95SReid Kleckner public:
51*0333dd95SReid Kleckner   using typename Base<T>::foo;
52*0333dd95SReid Kleckner   using Base<T>::bar;
53*0333dd95SReid Kleckner   typedef typename Derived::foo NewUnresolvedUsingType;
54*0333dd95SReid Kleckner };
55*0333dd95SReid Kleckner 
56*0333dd95SReid Kleckner } // end namespace TestUnresolvedTypenameAndValueDecls
57*0333dd95SReid Kleckner 
58*0333dd95SReid Kleckner namespace TestUsingNamespace {
59*0333dd95SReid Kleckner   using namespace Enclosing;
60*0333dd95SReid Kleckner }
61