117 lines · c
1/* -*- C++ -*- */2 3#include "dummy.h"4 5namespace DebugCXX {6 // Records.7 struct Struct {8 int i;9 static int static_member;10 };11 12 // Enums.13 enum Enum {14 Enumerator15 };16 enum {17 e1 = '1'18 };19 enum {20 e2 = '2'21 };22 23 // Templates (instantiations).24 template<typename T> struct traits {};25 template<typename T,26 typename Traits = traits<T>27 > class Template {28 T member;29 };30 // Explicit template instantiation.31 extern template class Template<int>;32 33 extern template struct traits<float>;34 typedef class Template<float> FloatInstantiation;35 36 inline void fn() {37 Template<long> invisible;38 }39 40 // Non-template inside a template.41 template <class> struct Outer {42 Outer();43 struct Inner {44 Inner(Outer) {}45 };46 };47 template <class T> Outer<T>::Outer() {48 Inner a(*this);49 };50 51 // Partial template specialization.52 template <typename...> class A;53 template <typename T> class A<T> {};54 typedef A<void> B;55 // Anchored by a function parameter.56 void foo(B) {}57}58 59// Virtual class with a forward declaration.60struct Virtual;61struct Virtual {62 virtual ~Virtual() {}63};64 65struct PureForwardDecl;66 67typedef union { int i; } TypedefUnion;68typedef enum { e0 = 0 } TypedefEnum;69typedef struct { int i; } TypedefStruct;70 71union { int i; } GlobalUnion;72struct { int i; } GlobalStruct;73enum { e5 = 5 } GlobalEnum;74 75namespace {76 namespace {77 struct InAnonymousNamespace { int i; };78 }79}80 81class Base;82class A {83 virtual Base *getParent() const;84};85class Base {};86class Derived : Base {87 class B : A {88 Derived *getParent() const override;89 };90};91 92template <class T>93class Template1 {94 T t;95};96typedef Template1<void *> TypedefTemplate;97extern template class Template1<int>;98 99template <class T> class FwdDeclTemplate;100typedef FwdDeclTemplate<int> TypedefFwdDeclTemplate;101 102// Member classes of class template specializations.103template <typename T> struct Specialized {};104 105template <> struct Specialized<int> {106 struct Member;107};108 109template <class T> struct FwdDeclTemplateMember { struct Member; };110typedef FwdDeclTemplateMember<int>::Member TypedefFwdDeclTemplateMember;111 112// Base class specialized on the class itself.113template <typename Derived> class BaseTemplate {};114template <typename T>115class WithSpecializedBase : public BaseTemplate<WithSpecializedBase<T>> {};116typedef WithSpecializedBase<float> SpecializedBase;117