scope02.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 209 行

C
209
字号
// { dg-do assemble  }//980529 bkoz//3.4.5 Class member access via pointer and non-pointer// non-nested dtor callsint counter = 0;struct X {  int rank;  X(int init = 64) : rank(init) { }  ~X() { ++counter; }  typedef X classtype;};typedef X globaltype;#if 0template <typename T>struct X_tem {  T rank;  X_tem(T init = T(64) ) : rank(init) { }  ~X_tem() { ++counter; }  typedef X_tem classtype_tem;};typedef X_tem<int> globaltype_tem;#endifint main(void){  // 3.4.5 Class member access  // p 2  // if the id-expression in a class member access is an  // unqualified-id, and the type of the object expression is of class  // type C (or pointer to class type C), the unqualified-id is looked  // up in the scope of class C. If the type of the object-expression  // is of pointer to scalar type, the unqualified-id is looked up in  // the context of the complete postfix-expression.  // p 3  // if the unqualitified id is ~type-name, and the type of the object  // expression is of a class type C (or pointer to class type C), the  // type-name is looked up in the context of the entire  // postfix-expression and in the scope of class C. The type-name  // shall refer to a class-name. If type-name is found in both  // contexts, the name shall refer to the same class type. If the  // type of the object expression is of scalar type, the type-name is  // looked up in the complete postfix-expression.    typedef X localtype;  //  // 1 non-templatized, pointer, unqualified  //  X x01 ;  X *px = &x01;  px->~X();   X x02 (66);  px = &x02;  px->~localtype();  X x03 (68);  px = &x03;  px->~classtype(); //-g++  //p3: unqual-id lookup in object and postfix-expr  X x04 (70);  px = &x04;  px->~globaltype();  // p 1  // . . . the id-expression is first looked up in the class of the  // object-expression. If the identifier is not found, itis then  // looked up in the context of the entier postfix-expression and  // shall name a class or function template. If the lookup in the  // class of the object-expression finds a template, the name is also  // looked up in teh context of the entier postfix-expression and  // 1 if the name is not found, use the name from the object-expr  // 2 if the name found in postfix-expr != class template, use object-expr  // 3 if name found is class template, name must match object-expr or error  // p 4   // if the id-expr in a class member acess is a qualified-id, the  // id-expression is looked up in both the context of the entire  // postfix-expr and in the scope of the class of the object-expr. If  // the name is found in both contexts, the id-expr shall refer to  // the same entity.  //  // 2 non-templatized, pointer, qualified  //  X x05 ;  px = &x05;  px->X::~X();   X x06 (66);  px = &x06;  px->X::~localtype();  X x07 (68);  px = &x07;  px->X::~classtype(); // -edg  X x08 (70);  px = &x08;  px->X::~globaltype();  X x09 (66);  px = &x09;  px->localtype::~localtype();  X x10 (68);  px = &x10;  px->classtype::~classtype();  X x11 (70);  px = &x11;  px->globaltype::~globaltype();  X x12 (66);  px = &x12;  px->classtype::~localtype();  X x13 (68);  px = &x13;  px->globaltype::~localtype();  X x14 (70);  px = &x14;  px->localtype::~globaltype();  X x15 (70);  px = &x15;  px->classtype::~globaltype();  X x16 (70);  px = &x16;  px->localtype::~classtype(); //-edg  X x17 (70);  px = &x17;  px->globaltype::~classtype(); //-edg#if 0  //  // non-templatized, non-pointer  //  X xo5 ;  xo5.~X(); //unqualified  localtype xo6 (66);  xo6.~localtype();  X xo7 (68);  xo7.~classtype();  X xo8 (70);  xo8.~globaltype();  //  // templatized, pointer  //  X_tem<int> xto1 ;  X_tem<int> *pxt = &xto1;  pxt->~X_tem(); //unqualified  typedef X_tem<int> localtype_tem;  localtype_tem xto2 (66);  pxt = &xto2;  pxt->~localtype_tem();  //paragraph 2:  unqualitifed id looked up in scope of post-fix expr if object  X_tem<int> xto3 (68);  pxt = &xto3;  pxt->~classtype_tem();  X_tem<int> xto4 (70);  pxt = &xto4;  pxt->~globaltype_tem();  //  // templatized, non-pointer  //  X_tem<int> xto5 ;  xto5.~X_tem(); //unqualified  localtype_tem xto6 (66);  xto6.~localtype_tem();  X_tem<int> xto7 (68);  xto7.~classtype_tem();  X_tem<int> xto8 (70);  xto8.~globaltype_tem();#endif  return 0;}

⌨️ 快捷键说明

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