instantiate-declref.cpp revision ed961e7fffc268eeace169869f5a059bcbd5fcbd
1// RUN: clang-cc -fsyntax-only -verify %s
2
3namespace N {
4  struct Outer {
5    struct Inner {
6      template<typename T>
7      struct InnerTemplate {
8        struct VeryInner {
9          typedef T type;
10
11          static enum K1 { K1Val = sizeof(T) } Kind1;
12          static enum { K2Val = sizeof(T)*2 } Kind2;
13          enum { K3Val = sizeof(T)*2 } Kind3;
14
15          void foo() {
16            K1 k1 = K1Val;
17            Kind1 = K1Val;
18            Outer::Inner::InnerTemplate<type>::VeryInner::Kind2 = K2Val;
19            Kind3 = K3Val;
20          }
21
22          struct UeberInner {
23            void bar() {
24              K1 k1 = K1Val;
25              Kind1 = K1Val;
26              Outer::Inner::InnerTemplate<type>::VeryInner::Kind2 = K2Val;
27
28              InnerTemplate t;
29              InnerTemplate<type> t2;
30            }
31          };
32        };
33      };
34    };
35  };
36}
37
38typedef int INT;
39template struct N::Outer::Inner::InnerTemplate<INT>::VeryInner;
40template struct N::Outer::Inner::InnerTemplate<INT>::UeberInner; // expected-error{{'UeberInner' does not name a tag member}}
41