/* -*- C++ -*- */ #include "dummy.h" namespace DebugCXX { // Records. struct Struct { int i; static int static_member; }; // Enums. enum Enum { Enumerator }; enum { e1 = '1' }; enum { e2 = '2' }; // Templates (instantiations). template struct traits {}; template > class Template { T member; }; // Explicit template instantiation. extern template class Template; extern template struct traits; typedef class Template FloatInstantiation; inline void fn() { Template invisible; } // Non-template inside a template. template struct Outer { Outer(); struct Inner { Inner(Outer) {} }; }; template Outer::Outer() { Inner a(*this); }; // Partial template specialization. template class A; template class A {}; typedef A B; // Anchored by a function parameter. void foo(B) {} } // Virtual class with a forward declaration. struct Virtual; struct Virtual { virtual ~Virtual() {} }; struct PureForwardDecl; typedef union { int i; } TypedefUnion; typedef enum { e0 = 0 } TypedefEnum; typedef struct { int i; } TypedefStruct; union { int i; } GlobalUnion; struct { int i; } GlobalStruct; enum { e5 = 5 } GlobalEnum; namespace { namespace { struct InAnonymousNamespace { int i; }; } } class Base; class A { virtual Base *getParent() const; }; class Base {}; class Derived : Base { class B : A { Derived *getParent() const override; }; }; template class Template1 { T t; }; typedef Template1 TypedefTemplate; extern template class Template1; template class FwdDeclTemplate; typedef FwdDeclTemplate TypedefFwdDeclTemplate; // Member classes of class template specializations. template struct Specialized {}; template <> struct Specialized { struct Member; }; template struct FwdDeclTemplateMember { struct Member; }; typedef FwdDeclTemplateMember::Member TypedefFwdDeclTemplateMember; // Base class specialized on the class itself. template class BaseTemplate {}; template class WithSpecializedBase : public BaseTemplate> {}; typedef WithSpecializedBase SpecializedBase;