1 | #include <stdio.h> |
2 | |
3 | class Task { |
4 | public: |
5 | int id; |
6 | Task *next; |
7 | enum { |
8 | TASK_TYPE_1, |
9 | TASK_TYPE_2 |
10 | } type; |
11 | // This struct is anonymous b/c it does not have a name |
12 | // and it is not unnamed class. |
13 | // Anonymous classes are a GNU extension. |
14 | struct { |
15 | int y; |
16 | }; |
17 | // This struct is an unnamed class see [class.pre]p1 |
18 | // http://eel.is/c++draft/class#pre-1.sentence-6 |
19 | struct { |
20 | int x; |
21 | } my_type_is_nameless; |
22 | struct name { |
23 | int x; |
24 | enum E : int {} e; |
25 | enum E2 {} e2; |
26 | } my_type_is_named; |
27 | enum E : unsigned char {} e; |
28 | union U { |
29 | } u; |
30 | static constexpr long static_constexpr_field = 47; |
31 | static constexpr bool static_constexpr_bool_field = true; |
32 | static int static_mutable_field; |
33 | Task(int i, Task *n): |
34 | id(i), |
35 | next(n), |
36 | type(TASK_TYPE_1) |
37 | {} |
38 | }; |
39 | int Task::static_mutable_field = 42; |
40 | |
41 | template <unsigned Value> struct PointerInfo { |
42 | enum Masks1 { pointer_mask }; |
43 | enum class Masks2 { pointer_mask }; |
44 | }; |
45 | |
46 | template <unsigned Value, typename InfoType = PointerInfo<Value>> |
47 | struct Pointer {}; |
48 | |
49 | enum EnumType {}; |
50 | enum class ScopedEnumType {}; |
51 | enum class EnumUChar : unsigned char {}; |
52 | |
53 | struct alignas(128) OverAlignedStruct {}; |
54 | OverAlignedStruct over_aligned_struct; |
55 | |
56 | struct WithNestedTypedef { |
57 | typedef int TheTypedef; |
58 | }; |
59 | WithNestedTypedef::TheTypedef typedefed_value; |
60 | |
61 | int main (int argc, char const *argv[]) |
62 | { |
63 | Task *task_head = new Task(-1, NULL); |
64 | Task *task1 = new Task(1, NULL); |
65 | Task *task2 = new Task(2, NULL); |
66 | Task *task3 = new Task(3, NULL); // Orphaned. |
67 | Task *task4 = new Task(4, NULL); |
68 | Task *task5 = new Task(5, NULL); |
69 | |
70 | task_head->next = task1; |
71 | task1->next = task2; |
72 | task2->next = task4; |
73 | task4->next = task5; |
74 | |
75 | int total = 0; |
76 | Task *t = task_head; |
77 | while (t != NULL) { |
78 | if (t->id >= 0) |
79 | ++total; |
80 | t = t->next; |
81 | } |
82 | printf(format: "We have a total number of %d tasks\n" , total); |
83 | |
84 | // This corresponds to an empty task list. |
85 | Task *empty_task_head = new Task(-1, NULL); |
86 | |
87 | typedef int myint; |
88 | myint myint_arr[] = {1, 2, 3}; |
89 | |
90 | EnumType enum_type; |
91 | ScopedEnumType scoped_enum_type; |
92 | EnumUChar scoped_enum_type_uchar; |
93 | |
94 | Pointer<3> pointer; |
95 | PointerInfo<3>::Masks1 mask1 = PointerInfo<3>::Masks1::pointer_mask; |
96 | PointerInfo<3>::Masks2 mask2 = PointerInfo<3>::Masks2::pointer_mask; |
97 | |
98 | return 0; // Break at this line |
99 | } |
100 | |