blob: 3b6db38617b037cb9fad0bd46a3d6609082c33c2 [file] [log] [blame]
Douglas Gregord769bfa2009-05-27 17:30:49 +00001// RUN: clang-cc -fsyntax-only -verify %s
Douglas Gregore919fb02009-05-27 17:07:49 +00002
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;
Douglas Gregor8d717432009-05-27 17:20:35 +000012 static enum { K2Val = sizeof(T)*2 } Kind2;
Douglas Gregord769bfa2009-05-27 17:30:49 +000013 enum { K3Val = sizeof(T)*2 } Kind3;
Douglas Gregore919fb02009-05-27 17:07:49 +000014
15 void foo() {
16 K1 k1 = K1Val;
17 Kind1 = K1Val;
18 Outer::Inner::InnerTemplate<type>::VeryInner::Kind2 = K2Val;
Douglas Gregord769bfa2009-05-27 17:30:49 +000019 Kind3 = K3Val;
Douglas Gregore919fb02009-05-27 17:07:49 +000020 }
Douglas Gregord769bfa2009-05-27 17:30:49 +000021
22 struct UeberInner {
23 void bar() {
24 K1 k1 = K1Val;
25 Kind1 = K1Val;
26 Outer::Inner::InnerTemplate<type>::VeryInner::Kind2 = K2Val;
27 }
28 };
Douglas Gregore919fb02009-05-27 17:07:49 +000029 };
30 };
31 };
32 };
33}
34
35typedef int INT;
36template struct N::Outer::Inner::InnerTemplate<INT>::VeryInner;
Douglas Gregord769bfa2009-05-27 17:30:49 +000037template struct N::Outer::Inner::InnerTemplate<INT>::UeberInner; // expected-error{{'UeberInner' does not name a tag member}}