| /* -*- 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<typename T> struct traits {}; |
| template<typename T, |
| typename Traits = traits<T> |
| > class Template { |
| T member; |
| }; |
| // Explicit template instantiation. |
| extern template class Template<int>; |
| |
| extern template struct traits<float>; |
| typedef class Template<float> FloatInstantiation; |
| |
| 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; |
| // 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 T> |
| class Template1 { |
| T t; |
| }; |
| typedef Template1<void *> TypedefTemplate; |
| extern template class Template1<int>; |
| |
| template <class T> class FwdDeclTemplate; |
| typedef FwdDeclTemplate<int> TypedefFwdDeclTemplate; |
| |
| // Member classes of class template specializations. |
| template <typename T> struct Specialized {}; |
| |
| template <> struct Specialized<int> { |
| struct Member; |
| }; |
| |
| template <class T> struct FwdDeclTemplateMember { struct Member; }; |
| typedef FwdDeclTemplateMember<int>::Member TypedefFwdDeclTemplateMember; |
| |
| // Base class specialized on the class itself. |
| template <typename Derived> class BaseTemplate {}; |
| template <typename T> |
| class WithSpecializedBase : public BaseTemplate<WithSpecializedBase<T>> {}; |
| typedef WithSpecializedBase<float> SpecializedBase; |