| #include <stdio.h> |
| |
| class Task { |
| public: |
| int id; |
| Task *next; |
| enum { |
| TASK_TYPE_1, |
| TASK_TYPE_2 |
| } type; |
| // This struct is anonymous b/c it does not have a name |
| // and it is not unnamed class. |
| // Anonymous classes are a GNU extension. |
| struct { |
| int y; |
| }; |
| // This struct is an unnamed class see [class.pre]p1 |
| // http://eel.is/c++draft/class#pre-1.sentence-6 |
| struct { |
| int x; |
| } my_type_is_nameless; |
| struct name { |
| int x; |
| enum E : int {} e; |
| enum E2 {} e2; |
| } my_type_is_named; |
| enum E : unsigned char {} e; |
| union U { |
| } u; |
| static constexpr long static_constexpr_field = 47; |
| static constexpr bool static_constexpr_bool_field = true; |
| static int static_mutable_field; |
| Task(int i, Task *n): |
| id(i), |
| next(n), |
| type(TASK_TYPE_1) |
| {} |
| }; |
| int Task::static_mutable_field = 42; |
| |
| template <unsigned Value> struct PointerInfo { |
| enum Masks1 { pointer_mask }; |
| enum class Masks2 { pointer_mask }; |
| }; |
| |
| template <unsigned Value, typename InfoType = PointerInfo<Value>> |
| struct Pointer {}; |
| |
| enum EnumType {}; |
| enum class ScopedEnumType {}; |
| enum class EnumUChar : unsigned char {}; |
| |
| struct alignas(128) OverAlignedStruct {}; |
| OverAlignedStruct over_aligned_struct; |
| |
| struct WithNestedTypedef { |
| typedef int TheTypedef; |
| }; |
| WithNestedTypedef::TheTypedef typedefed_value; |
| |
| int main (int argc, char const *argv[]) |
| { |
| Task *task_head = new Task(-1, NULL); |
| Task *task1 = new Task(1, NULL); |
| Task *task2 = new Task(2, NULL); |
| Task *task3 = new Task(3, NULL); // Orphaned. |
| Task *task4 = new Task(4, NULL); |
| Task *task5 = new Task(5, NULL); |
| |
| task_head->next = task1; |
| task1->next = task2; |
| task2->next = task4; |
| task4->next = task5; |
| |
| int total = 0; |
| Task *t = task_head; |
| while (t != NULL) { |
| if (t->id >= 0) |
| ++total; |
| t = t->next; |
| } |
| printf("We have a total number of %d tasks\n", total); |
| |
| // This corresponds to an empty task list. |
| Task *empty_task_head = new Task(-1, NULL); |
| |
| typedef int myint; |
| myint myint_arr[] = {1, 2, 3}; |
| |
| EnumType enum_type; |
| ScopedEnumType scoped_enum_type; |
| EnumUChar scoped_enum_type_uchar; |
| |
| Pointer<3> pointer; |
| PointerInfo<3>::Masks1 mask1 = PointerInfo<3>::Masks1::pointer_mask; |
| PointerInfo<3>::Masks2 mask2 = PointerInfo<3>::Masks2::pointer_mask; |
| |
| return 0; // Break at this line |
| } |