brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 8f83c0b Raw
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