forward-inner.c

来自「用于进行gcc测试」· C语言 代码 · 共 82 行

C
82
字号
// Check that the compiler warns about inner-style forward declarations in// contexts where they're not actually illegal, but merely useless.// Verify warnings for and within classes, and by extension, struct and union.class C1;class C1::C2;      // { dg-error "does not name a type" }class C1::C2::C3;  // { dg-error "has not been declared" }class C1 { public:  class C2;  class C2::C3;    // { dg-error "does not name a type" }  class C2 {   public:    class C3;    class C3 { };    class C3;  };  class C2;  class C2::C3;    // { dg-warning "declaration 'class C1::C2::C3' does not declare anything" }};class C1;class C1::C2;      // { dg-warning "declaration 'class C1::C2' does not declare anything" }class C1::C2::C3;  // { dg-warning "declaration 'class C1::C2::C3' does not declare anything" }// Verify warnings for namespace scopes.class N1::C4;      // { dg-error "has not been declared" }class N1::N2::C5;  // { dg-error "has not been declared" }namespace N1 {  class C4;  class C4 { };  class C4;  class N2::C5;    // { dg-error "has not been declared" }  namespace N2 {    class C5;    class C5 { };    class C5;  }  class N2::C5;    // { dg-warning "declaration 'class N1::N2::C5' does not declare anything" }}class N1::C4;      // { dg-warning "declaration 'class N1::C4' does not declare anything" }class N1::N2::C5;  // { dg-warning "declaration 'class N1::N2::C5' does not declare anything" }// Verify that using declarations related to namespaces don't generate a// warning.using namespace N1;using namespace N1::N2;namespace N3 {  using N1::C4;      // Valid using declaration, no warning  using N1::N2::C5;  // Valid using declaration, no warning}// Verify that explicit template instantiations, easy to confuse with// forward declarations, don't generate a warning.template<class C>class TC6 { public:  class TC7 { };};template class TC6<int>::TC7;  // Valid explicit instantiation, no warning// Verify that friend declarations, also easy to confuse with forward// declrations, are similarly not warned about.class C8 { public:  class C9 { };};class C10 { public:  friend class C8::C9;         // Valid friend declaration, no warning};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?