blob: e6c38435abe69021d8c6d49e1a6e006a27f7983d [file] [log] [blame]
Adrian Prantl4aa2b3a2015-09-08 19:20:27 +00001/* -*- C++ -*- */
2namespace DebugCXX {
3 // Records.
4 struct Struct {
5 int i;
6 static int static_member;
7 };
8
9 // Enums.
10 enum Enum {
11 Enumerator
12 };
13 enum {
14 e1 = '1'
15 };
16 enum {
17 e2 = '2'
18 };
19
Adrian Prantlb2a8b352016-01-06 19:22:23 +000020 // Templates (instantiations).
Adrian Prantl4aa2b3a2015-09-08 19:20:27 +000021 template<typename T> struct traits {};
22 template<typename T,
23 typename Traits = traits<T>
24 > class Template {
25 T member;
26 };
Adrian Prantl05fefa42016-04-25 20:52:40 +000027 // Explicit template instantiation.
Adrian Prantl4aa2b3a2015-09-08 19:20:27 +000028 extern template class Template<int>;
29
30 extern template struct traits<float>;
Adrian Prantl05fefa42016-04-25 20:52:40 +000031 typedef class Template<float> FloatInstantiation;
Adrian Prantl4aa2b3a2015-09-08 19:20:27 +000032
33 inline void fn() {
34 Template<long> invisible;
35 }
36
37 // Non-template inside a template.
38 template <class> struct Outer {
39 Outer();
40 struct Inner {
41 Inner(Outer) {}
42 };
43 };
44 template <class T> Outer<T>::Outer() {
45 Inner a(*this);
46 };
47
48 // Partial template specialization.
49 template <typename...> class A;
50 template <typename T> class A<T> {};
51 typedef A<void> B;
Adrian Prantl05fefa42016-04-25 20:52:40 +000052 // Anchored by a function parameter.
Adrian Prantl4aa2b3a2015-09-08 19:20:27 +000053 void foo(B) {}
54}
Adrian Prantlb3b821f2016-01-06 19:22:19 +000055
56// Virtual class with a forward declaration.
57class FwdVirtual;
58class FwdVirtual {
59 virtual ~FwdVirtual() {}
60};
Adrian Prantl35e765b2016-01-09 01:11:35 +000061
62struct PureForwardDecl;
Adrian Prantle5238d22016-01-19 18:02:47 +000063
64typedef union { int i; } TypedefUnion;
65typedef enum { e0 = 0 } TypedefEnum;
66typedef struct { int i; } TypedefStruct;
Adrian Prantlcd975012016-01-19 23:42:44 +000067
68union { int i; } GlobalUnion;
69struct { int i; } GlobalStruct;
70enum { e5 = 5 } GlobalEnum;
Adrian Prantl8f55b662016-01-20 01:29:34 +000071
72namespace {
73 namespace {
74 struct InAnonymousNamespace { int i; };
75 }
76}
Adrian Prantl5a9a4272016-03-07 20:58:52 +000077
78class Base;
79class A {
80 virtual Base *getParent() const;
81};
82class Base {};
83class Derived : Base {
84 class B : A {
85 Derived *getParent() const override;
86 };
87};
Adrian Prantl05fefa42016-04-25 20:52:40 +000088
89template <class T>
90class Template1 {
91 T t;
92};
93typedef Template1<void *> TypedefTemplate;
94extern template class Template1<int>;
95
96template <class T> class FwdDeclTemplate;
97typedef FwdDeclTemplate<int> TypedefFwdDeclTemplate;