// Tests for local types

void marker1 (void)
{ 
}

  
int foobar (int x)
{
  class Local {
  public:
    int loc1;
    char loc_foo (char c)
    {
      return c + 3;
    }
  };

  Local l;
  static Local l1;
  char  c;

  l.loc1 = 23;

  c = l.loc_foo('x');
  return c + 2;
}

int main()
{
  int c;
  
  c = foobar (31);
  
 { // inner block
   class InnerLocal {
   public:
     char ilc;
     int * ip;
     int il_foo (unsigned const char & uccr)
     {
       return uccr + 333;
     }
     class NestedInnerLocal {
     public:
       int nil;
       int nil_foo (int i)
       {
         return i * 27;
       }
     };
     NestedInnerLocal nest1;
   };

   InnerLocal il;

   il.ilc = 'b';
   il.ip = &c;
   marker1();
 }
}
