1 struct EmptyClass {};
2 struct DefinedClass {
3   int i;
4 };
5 typedef DefinedClass DefinedClassTypedef;
6 
7 struct FwdClass;
8 typedef FwdClass FwdClassTypedef;
9 
10 template <typename T> struct DefinedTemplateClass {};
11 template <> struct DefinedTemplateClass<int> {};
12 
13 template <typename T> struct FwdTemplateClass;
14 template <> struct FwdTemplateClass<int>;
15 
16 enum class EnumClassFwd;
17 
18 enum DefinedEnum { Case1 };
19 enum DefinedEnumClass { Case2 };
20 
21 EmptyClass empty_class;
22 DefinedClass defined_class;
23 DefinedClassTypedef defined_class_typedef;
24 
25 FwdClass *fwd_class;
26 FwdClassTypedef *fwd_class_typedef;
27 
28 DefinedTemplateClass<int> defined_template_class;
29 FwdTemplateClass<int> *fwd_template_class;
30 
31 EnumClassFwd *fwd_enum_class = nullptr;
32 
33 DefinedEnum defined_enum = Case1;
34 DefinedEnumClass defined_enum_class = DefinedEnumClass::Case2;
35 
main()36 int main() {}
37