// { dg-do run  }
// 980617 bkoz
// typeid for local types
// typeid bool vs int and enum vs int

#include <typeinfo>
#ifdef DEBUG_ASSERT
#include <assert.h>
#endif

// 4: local class in non-main function

void test1 (void) {
  bool class_p = false;
  class X2 { 
  private:
    unsigned int counter;
  public:
    X2 (unsigned int i = 35): counter(i) {}
    ~X2(){}
    unsigned int ret_counter() {return counter;}
  };
  X2 obj_1;
  class_p = typeid(X2) == typeid(obj_1);
}  

int main ()
{
  // 1: simple
#if 1
  bool enum_p = false;
  enum E { A, B, C };
  enum_p = typeid(A) == typeid(E);
#ifdef DEBUG_ASSERT
  assert (enum_p);
#endif
#endif  

  // 2: complex
#if 0
  bool enum2_p = false;
  bool int_p = false;
  bool bool_p = false;
  enum E2 { A2, B2};
  enum2_p = typeid(A2) == typeid(E2);
  int_p =  typeid(int) == typeid(E2);
  bool_p =  typeid(bool) == typeid(E2);
#ifdef DEBUG_ASSERT
  assert (enum2_p);
  assert (!int_p);
  assert (!bool_p);
#endif
#endif

  // 3: local class
  bool class_p = false;
  class X { 
  private:
    unsigned int counter;
  public:
    X (unsigned int i = 35): counter(i) {}
    ~X(){}
    unsigned int ret_counter() {return counter;}
  };
  X obj_1;
  class_p = typeid(X) == typeid(obj_1);

  // 4: local class in function
  test1();

  return 0;
}
