#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; }; } }