| 4165 | { |
| 4166 | template<typename T, typename U> |
| 4167 | auto operator()( |
| 4168 | T final_types_and_result, U x_index_and_prev_merged) const |
| 4169 | { |
| 4170 | using namespace literals; |
| 4171 | using detail::merge_wrap; |
| 4172 | using detail::merge_kind; |
| 4173 | |
| 4174 | auto final_types = parser::get(final_types_and_result, 0_c); |
| 4175 | auto result = parser::get(final_types_and_result, 1_c); |
| 4176 | |
| 4177 | auto x_type_wrapper = parser::get(x_index_and_prev_merged, 0_c); |
| 4178 | auto index = parser::get(x_index_and_prev_merged, 1_c); |
| 4179 | auto prev_merged = parser::get(x_index_and_prev_merged, 2_c); |
| 4180 | |
| 4181 | auto type_at_index_wrapper = parser::get(final_types, index); |
| 4182 | using x_type = typename decltype(x_type_wrapper)::type; |
| 4183 | using type_at_index = |
| 4184 | typename decltype(type_at_index_wrapper)::type; |
| 4185 | if constexpr ( |
| 4186 | decltype(prev_merged)::kind == |
| 4187 | merge_kind::second_pass_detect) { |
| 4188 | if constexpr ( |
| 4189 | !std::is_same_v<x_type, type_at_index> && |
| 4190 | container<type_at_index>) { |
| 4191 | return detail::hl::make_tuple( |
| 4192 | final_types, |
| 4193 | detail::hl::append( |
| 4194 | result, merge_wrap<merge_kind::merged>)); |
| 4195 | } else { |
| 4196 | return detail::hl::make_tuple( |
| 4197 | final_types, |
| 4198 | detail::hl::append( |
| 4199 | result, merge_wrap<merge_kind::singleton>)); |
| 4200 | } |
| 4201 | } else { |
| 4202 | return detail::hl::make_tuple( |
| 4203 | final_types, detail::hl::append(result, prev_merged)); |
| 4204 | } |
| 4205 | } |
| 4206 | }; |
| 4207 | |
| 4208 | template<long long I> |
nothing calls this directly
no test coverage detected