Home | History | Annotate | Line # | Download | only in gdb.cp
koenig.cc revision 1.1
      1 namespace A
      2 {
      3   class C
      4   {
      5   public:
      6     static const int x = 11;
      7   };
      8 
      9   int
     10   first (C c)
     11   {
     12     return 11;
     13   }
     14 
     15   int
     16   first (int a, C c)
     17   {
     18     return 22;
     19   }
     20 
     21   int
     22   second (int a, int b, C cc, int c, int d)
     23   {
     24     return 33;
     25   }
     26 
     27   int
     28   entry (C c)
     29   {
     30     return 44;
     31   }
     32 }
     33 
     34 struct B
     35 {
     36   A::C c;
     37 };
     38 
     39 //------------
     40 
     41 namespace E
     42 {
     43   class O{};
     44   int foo (O o){return 1; }
     45   int foo (O o, O o2){return 2; }
     46   int foo (O o, O o2, int i){return 3; }
     47 }
     48 
     49 namespace F
     50 {
     51   class O{};
     52   int foo (       O fo, ::E::O eo){ return 4;}
     53   int foo (int i, O fo, ::E::O eo){ return 5;}
     54 }
     55 
     56 namespace G
     57 {
     58   class O{};
     59   int foo (O go, ::F::O fo, ::E::O eo){ return 6; }
     60 }
     61 
     62 //------------
     63 
     64 namespace H
     65 {
     66   class O{};
     67   int foo (O){ return 7;}
     68 }
     69 
     70 namespace I
     71 {
     72   class O: public H::O {};
     73   class X: H::O{};
     74 }
     75 
     76 //------------
     77 
     78 namespace J
     79 {
     80   union U{};
     81   struct S{};
     82   enum E{};
     83 
     84   class A{
     85   public:
     86     class B{};
     87   };
     88 
     89   class C{};
     90 
     91   int foo (U){ return 8;}
     92   int foo (S){ return 9;}
     93   int foo (E){ return 10;}
     94   int foo (A::B){ return 11;}
     95   int foo (A*){ return 12;}
     96   int foo (A**){ return 13;}
     97   int foo (C[]){ return 14;}
     98 
     99 }
    100 //------------
    101 
    102 namespace K{
    103   class O{};
    104 
    105   int foo(O, int){
    106     return 15;
    107   }
    108 
    109   int bar(O, int){
    110     return 15;
    111   }
    112 }
    113 
    114 int foo(K::O, float){
    115   return 16;
    116 }
    117 
    118 int bar(K::O, int){
    119   return 16;
    120 }
    121 //------------
    122 
    123 namespace L {
    124   namespace A{
    125     namespace B{
    126     class O {};
    127 
    128     int foo (O){
    129       return 17;
    130     }
    131 
    132     }
    133   }
    134 }
    135 
    136 //------------
    137 
    138 namespace M {
    139   class A{
    140   public:
    141     int foo(char) {
    142       return 18;
    143     }
    144   };
    145 
    146   int foo(A,char){
    147       return 19;
    148   }
    149 
    150   int foo(A *,char){
    151     return 23;
    152   }
    153 
    154   int bar(char){
    155     return 21;
    156   }
    157 
    158   namespace N {
    159     int foo(::M::A,int){
    160       return 20;
    161     }
    162 
    163     int bar(int){
    164       return 22;
    165     }
    166   }
    167 }
    168 //------------
    169 
    170 namespace O {
    171   class A{};
    172 
    173   int foo(A,int){
    174     return 23;
    175   }
    176 
    177 }
    178 
    179 typedef O::A TOA;
    180 typedef TOA  TTOA;
    181 
    182 //------------
    183 
    184 static union {
    185     int  a;
    186     char b;
    187 }p_union;
    188 
    189 //------------
    190 
    191 namespace P {
    192   class Q{
    193   public:
    194     int operator== (int)
    195       {
    196         return 24;
    197       }
    198 
    199     int operator== (float)
    200       {
    201         return 25;
    202       }
    203 
    204     int operator+ (float)
    205       {
    206         return 26;
    207       }
    208 
    209   };
    210 
    211   int operator!= (Q, int)
    212     {
    213       return 27;
    214     }
    215 
    216   int operator!= (Q, double)
    217     {
    218       return 28;
    219     }
    220 
    221   int operator+ (Q, int)
    222     {
    223       return 29;
    224     }
    225 
    226   int operator++ (Q)
    227     {
    228       return 30;
    229     }
    230 }
    231 
    232 //------------
    233 
    234 class R {
    235   public:
    236     int rfoo(){ return 31; }
    237     int rbar(){
    238       return 1; // marker1
    239     }
    240 };
    241 
    242 //------------
    243 
    244 int
    245 main ()
    246 {
    247   A::C c;
    248   B b;
    249 
    250   A::first (c);
    251   first (0, c);
    252   second (0, 0, c, 0, 0);
    253   entry (c);
    254   A::first (b.c);
    255 
    256   E::O eo;
    257   F::O fo;
    258   G::O go;
    259 
    260   foo (eo);
    261   foo (eo, eo);
    262   foo (eo, eo, 1);
    263   foo (fo, eo);
    264   foo (1  ,fo, eo);
    265   foo (go, fo, eo);
    266 
    267   I::O io;
    268   I::X ix;
    269 
    270   foo (io);
    271 //foo (ix);
    272 
    273   J::U ju;
    274   J::S js;
    275   J::E je;
    276   J::A::B jab;
    277   J::A *jap;
    278   J::A **japp;
    279   J::C jca[3];
    280 
    281   foo (ju);
    282   foo (js);
    283   foo (je);
    284   foo (jab);
    285   foo (jap);
    286   foo (japp);
    287   foo (jca);
    288 
    289   K::O ko;
    290   foo (ko, 1);
    291   foo (ko, 1.0f);
    292   //bar(ko,1);
    293 
    294   L::A::B::O labo;
    295   foo (labo);
    296 
    297   M::A ma;
    298   foo(ma,'a');
    299   ma.foo('a');
    300   M::N::foo(ma,'a');
    301 
    302   M::bar('a');
    303   M::N::bar('a');
    304 
    305   TTOA ttoa;
    306   foo (ttoa, 'a');
    307 
    308   P::Q q;
    309   q == 5;
    310   q == 5.0f;
    311   q != 5;
    312   q != 5.0f;
    313   q + 5;
    314   q + 5.0f;
    315 
    316   ++q;
    317 
    318   R r;
    319   r.rbar();
    320   r.rfoo();
    321 
    322   return first (0, c) + foo (eo) +
    323          foo (eo, eo) + foo (eo, eo, 1)  +
    324          foo (fo, eo) + foo (1  ,fo, eo) +
    325          foo (go, fo, eo);
    326 }
    327