1 // PR c++/79817 - attribute deprecated on namespace.
2 // { dg-do compile { target c++11 } }
3 
4 namespace [[deprecated]] N {
5   struct S { };
6   using T = int;
7   const int value = 42;
8   int arr[10];
9 }
10 
11 namespace [[deprecated]] Y {
12   int x;
13   int i = x;
14 }
15 
16 namespace [[deprecated]] M {
17   namespace M2 {
18   }
19 }
20 
21 enum E { F =  N::value }; // { dg-warning ".N. is deprecated" }
22 
23 template<N::T> // { dg-warning ".N. is deprecated" }
24 struct X { };
25 
26 N::T foo(); // { dg-warning ".N. is deprecated" }
27 
28 void
g(N::T p)29 g(N::T p) // { dg-warning ".N. is deprecated" }
30 {
31   N::S s; // { dg-warning ".N. is deprecated" }
32   N::arr[0] = 42; // { dg-warning ".N. is deprecated" }
33 }
34 
35 namespace Z = Y; // { dg-warning ".Y. is deprecated" }
36 namespace Z2 = M::M2; // { dg-warning ".M. is deprecated" }
37 
38 void
g2()39 g2 ()
40 {
41   using namespace Y; // { dg-warning ".Y. is deprecated" }
42   using namespace M::M2; // { dg-warning ".M. is deprecated" }
43   using TT = N::T; // { dg-warning ".N. is deprecated" }
44   using N::T; // { dg-warning ".N. is deprecated" }
45 }
46