1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li // C++0x [class.nest] p3: 5*67e74705SXin Li // If class X is defined in a namespace scope, a nested class Y may be 6*67e74705SXin Li // declared in class X and later defined in the definition of class X or be 7*67e74705SXin Li // later defined in a namespace scope enclosing the definition of class X. 8*67e74705SXin Li 9*67e74705SXin Li namespace example { 10*67e74705SXin Li class E { 11*67e74705SXin Li class I1; 12*67e74705SXin Li class I2; 13*67e74705SXin Li class I1 { }; 14*67e74705SXin Li }; 15*67e74705SXin Li class E::I2 { }; 16*67e74705SXin Li } 17*67e74705SXin Li 18*67e74705SXin Li // Don't insert out-of-line inner class definitions into the namespace scope. 19*67e74705SXin Li namespace PR6107 { 20*67e74705SXin Li struct S1 { }; 21*67e74705SXin Li struct S2 { 22*67e74705SXin Li struct S1; 23*67e74705SXin Li }; 24*67e74705SXin Li struct S2::S1 { }; 25*67e74705SXin Li S1 s1; 26*67e74705SXin Li } 27