# t00064 - Template type list test case ## Config ```yaml diagrams: t00064_class: type: class glob: - t00064.cc include: namespaces: - clanguml::t00064 using_namespace: clanguml::t00064 plantuml: before: - left to right direction ``` ## Source code File `tests/t00064/t00064.cc` ```cpp #include #include namespace clanguml { namespace t00064 { // Loosely based on template struct type_list { }; template struct type_list { }; template struct type_list { }; template struct head; template struct head> { using type = Head; }; template using first_t = type_list; template using second_t = type_list; template class type_group_pair; template class type_group_pair, second_t> { static constexpr size_t size = sizeof...(First) + sizeof...(Second); }; template struct optional_ref { }; template class type_group_pair_it; template class type_group_pair_it, second_t> { public: using value_type = decltype(std::tuple_cat(std::make_tuple(*std::declval()), std::declval().get_as_tuple({})..., std::declval().get_as_tuple({})...)); using ref_t = optional_ref; ref_t get(unsigned i) { return {}; } const value_type *getp(unsigned i) { return nullptr; } constexpr unsigned find(value_type const &v) { return 0; } }; struct A { }; struct B { }; struct C { }; class R { public: type_list aboolint; type_group_pair, type_list> abc; }; } } ``` ## Generated PlantUML diagrams ![t00064_class](./t00064_class.svg "Template type list test case") ## Generated Mermaid diagrams ![t00064_class](./t00064_class_mermaid.svg "Template type list test case") ## Generated JSON models ```json { "diagram_type": "class", "elements": [ { "bases": [], "display_name": "type_list", "id": "16440354852046017112", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 34, "file": "t00064.cc", "line": 8, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "Ts...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "12291224704152846709", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 11, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "Ret", "template_parameters": [] }, { "is_variadic": false, "kind": "template_type", "name": "Arg", "template_parameters": [] } ] }, { "is_variadic": true, "kind": "template_type", "name": "Ts...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "12906349030998809160", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 46, "file": "t00064.cc", "line": 13, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "T", "template_parameters": [] }, { "is_variadic": true, "kind": "template_type", "name": "Ts...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "769608253178985720", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 17, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "Head", "template_parameters": [] }, { "is_variadic": true, "kind": "template_type", "name": "Tail...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "head>", "id": "10741333925591003015", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "head", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 17, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "Head", "template_parameters": [] }, { "is_variadic": true, "kind": "template_type", "name": "Tail...", "template_parameters": [] } ], "type": "type_list" } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "597240042638226493", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 29, "file": "t00064.cc", "line": 21, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "Type...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "15021642472081025560", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 7, "file": "t00064.cc", "line": 27, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "First...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "13900437116703425510", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 7, "file": "t00064.cc", "line": 27, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "Second...", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_group_pair,type_list>", "id": "10507370550285669286", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [ { "access": "private", "is_static": true, "name": "size", "source_location": { "column": 29, "file": "t00064.cc", "line": 28, "translation_unit": "t00064.cc" }, "type": "const size_t" } ], "methods": [], "name": "type_group_pair", "namespace": "clanguml::t00064", "source_location": { "column": 7, "file": "t00064.cc", "line": 27, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "First...", "template_parameters": [] } ], "type": "type_list" }, { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "Second...", "template_parameters": [] } ], "type": "type_list" } ], "type": "class" }, { "bases": [], "display_name": "optional_ref", "id": "16882528195637382119", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "optional_ref", "namespace": "clanguml::t00064", "source_location": { "column": 30, "file": "t00064.cc", "line": 31, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "T", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "optional_ref,type_list>::value_type>", "id": "3812248355494855459", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "optional_ref", "namespace": "clanguml::t00064", "source_location": { "column": 30, "file": "t00064.cc", "line": 31, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "type_group_pair_it,type_list>::value_type" } ], "type": "class" }, { "bases": [], "display_name": "type_group_pair_it,type_list>", "id": "8195070423933989553", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [ { "access": "public", "display_name": "get", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "get", "parameters": [ { "name": "i", "type": "unsigned int" } ], "source_location": { "column": 11, "file": "t00064.cc", "line": 44, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "ref_t" }, { "access": "public", "display_name": "getp", "is_const": false, "is_consteval": false, "is_constexpr": false, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "getp", "parameters": [ { "name": "i", "type": "unsigned int" } ], "source_location": { "column": 23, "file": "t00064.cc", "line": 46, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "const value_type *" }, { "access": "public", "display_name": "find", "is_const": false, "is_consteval": false, "is_constexpr": true, "is_constructor": false, "is_copy_assignment": false, "is_coroutine": false, "is_defaulted": false, "is_deleted": false, "is_move_assignment": false, "is_noexcept": false, "is_operator": false, "is_pure_virtual": false, "is_static": false, "is_virtual": false, "name": "find", "parameters": [ { "name": "v", "type": "const value_type &" } ], "source_location": { "column": 24, "file": "t00064.cc", "line": 48, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "unsigned int" } ], "name": "type_group_pair_it", "namespace": "clanguml::t00064", "source_location": { "column": 7, "file": "t00064.cc", "line": 35, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "It", "template_parameters": [] }, { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "First...", "template_parameters": [] } ], "type": "type_list" }, { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": true, "kind": "template_type", "name": "Second...", "template_parameters": [] } ], "type": "type_list" } ], "type": "class" }, { "bases": [], "display_name": "A", "id": "4690293411849965663", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": false, "is_union": false, "members": [], "methods": [], "name": "A", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 51, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "B", "id": "10826450462162929338", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": false, "is_union": false, "members": [], "methods": [], "name": "B", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 52, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "C", "id": "4784355132393181800", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": false, "is_union": false, "members": [], "methods": [], "name": "C", "namespace": "clanguml::t00064", "source_location": { "column": 8, "file": "t00064.cc", "line": 53, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "3404411618399518160", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 34, "file": "t00064.cc", "line": 8, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "A" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "bool" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "int" } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "1438807188122153557", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 37, "file": "t00064.cc", "line": 25, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "float" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "double" } ], "type": "class" }, { "bases": [], "display_name": "type_list", "id": "8563043506430978365", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_list", "namespace": "clanguml::t00064", "source_location": { "column": 37, "file": "t00064.cc", "line": 25, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "A" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "B" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "C" } ], "type": "class" }, { "bases": [], "display_name": "type_group_pair,type_list>", "id": "14832447519797787306", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_group_pair", "namespace": "clanguml::t00064", "source_location": { "column": 37, "file": "t00064.cc", "line": 25, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "float" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "double" } ], "type": "type_list" }, { "is_variadic": false, "kind": "argument", "template_parameters": [ { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "clanguml::t00064::A" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "clanguml::t00064::B" }, { "is_variadic": false, "kind": "argument", "template_parameters": [], "type": "clanguml::t00064::C" } ], "type": "type_list" } ], "type": "class" }, { "bases": [], "display_name": "R", "id": "17291404702326361893", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": false, "is_union": false, "members": [ { "access": "public", "is_static": false, "name": "aboolint", "source_location": { "column": 29, "file": "t00064.cc", "line": 57, "translation_unit": "t00064.cc" }, "type": "type_list" }, { "access": "public", "is_static": false, "name": "abc", "source_location": { "column": 67, "file": "t00064.cc", "line": 58, "translation_unit": "t00064.cc" }, "type": "type_group_pair,type_list>" } ], "methods": [], "name": "R", "namespace": "clanguml::t00064", "source_location": { "column": 7, "file": "t00064.cc", "line": 55, "translation_unit": "t00064.cc" }, "template_parameters": [], "type": "class" }, { "bases": [], "display_name": "type_group_pair", "id": "2175926029116580461", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_group_pair", "namespace": "clanguml::t00064", "source_location": { "column": 37, "file": "t00064.cc", "line": 25, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] }, { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "type_group_pair_it", "id": "8463251163753255664", "is_abstract": false, "is_nested": false, "is_struct": false, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "type_group_pair_it", "namespace": "clanguml::t00064", "source_location": { "column": 47, "file": "t00064.cc", "line": 33, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] }, { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] }, { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] } ], "type": "class" }, { "bases": [], "display_name": "head", "id": "10538515839073467198", "is_abstract": false, "is_nested": false, "is_struct": true, "is_template": true, "is_union": false, "members": [], "methods": [], "name": "head", "namespace": "clanguml::t00064", "source_location": { "column": 28, "file": "t00064.cc", "line": 15, "translation_unit": "t00064.cc" }, "template_parameters": [ { "is_variadic": false, "kind": "template_type", "name": "typename", "template_parameters": [] } ], "type": "class" } ], "name": "t00064_class", "package_type": "namespace", "relationships": [ { "access": "public", "destination": "16440354852046017112", "source": "12291224704152846709", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "12906349030998809160", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "769608253178985720", "type": "instantiation" }, { "access": "public", "destination": "769608253178985720", "source": "10741333925591003015", "type": "dependency" }, { "access": "public", "destination": "10538515839073467198", "source": "10741333925591003015", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "597240042638226493", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "15021642472081025560", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "13900437116703425510", "type": "instantiation" }, { "access": "public", "destination": "15021642472081025560", "source": "10507370550285669286", "type": "dependency" }, { "access": "public", "destination": "13900437116703425510", "source": "10507370550285669286", "type": "dependency" }, { "access": "public", "destination": "2175926029116580461", "source": "10507370550285669286", "type": "instantiation" }, { "access": "public", "destination": "16882528195637382119", "source": "3812248355494855459", "type": "instantiation" }, { "access": "public", "destination": "15021642472081025560", "source": "8195070423933989553", "type": "dependency" }, { "access": "public", "destination": "13900437116703425510", "source": "8195070423933989553", "type": "dependency" }, { "access": "public", "destination": "3812248355494855459", "source": "8195070423933989553", "type": "dependency" }, { "access": "public", "destination": "16882528195637382119", "source": "8195070423933989553", "type": "dependency" }, { "access": "public", "destination": "8463251163753255664", "source": "8195070423933989553", "type": "instantiation" }, { "access": "public", "destination": "4690293411849965663", "source": "3404411618399518160", "type": "dependency" }, { "access": "public", "destination": "16440354852046017112", "source": "3404411618399518160", "type": "instantiation" }, { "access": "public", "destination": "16440354852046017112", "source": "1438807188122153557", "type": "instantiation" }, { "access": "public", "destination": "4690293411849965663", "source": "8563043506430978365", "type": "dependency" }, { "access": "public", "destination": "10826450462162929338", "source": "8563043506430978365", "type": "dependency" }, { "access": "public", "destination": "4784355132393181800", "source": "8563043506430978365", "type": "dependency" }, { "access": "public", "destination": "16440354852046017112", "source": "8563043506430978365", "type": "instantiation" }, { "access": "public", "destination": "1438807188122153557", "source": "14832447519797787306", "type": "dependency" }, { "access": "public", "destination": "8563043506430978365", "source": "14832447519797787306", "type": "dependency" }, { "access": "public", "destination": "10507370550285669286", "source": "14832447519797787306", "type": "instantiation" }, { "access": "public", "destination": "3404411618399518160", "label": "aboolint", "source": "17291404702326361893", "type": "aggregation" }, { "access": "public", "destination": "14832447519797787306", "label": "abc", "source": "17291404702326361893", "type": "aggregation" } ], "using_namespace": "clanguml::t00064" } ```