/* -*- C++ -*- */
namespace DebugCXX {
  // Records.
  struct Struct {
    int i;
    static int static_member;
  };

  // Enums.
  enum Enum {
    Enumerator
  };
  enum {
    e1 = '1'
  };
  enum {
    e2 = '2'
  };

  // Templates (instatiations).
  template<typename T> struct traits {};
  template<typename T,
           typename Traits = traits<T>
          > class Template {
    T member;
  };
  extern template class Template<int>;

  extern template struct traits<float>;
  typedef class Template<float> FloatInstatiation;

  inline void fn() {
    Template<long> invisible;
  }

  // Non-template inside a template.
  template <class> struct Outer {
    Outer();
    struct Inner {
      Inner(Outer) {}
    };
  };
  template <class T> Outer<T>::Outer() {
    Inner a(*this);
  };

  // Partial template specialization.
  template <typename...> class A;
  template <typename T> class A<T> {};
  typedef A<void> B;
  void foo(B) {}
}
