NOLINTNEXTLINE(misc-no-recursion)
| 206 | template <typename C, typename S, typename UnaryOp> |
| 207 | // NOLINTNEXTLINE(misc-no-recursion) |
| 208 | auto Join(const C& container, const S& separator, UnaryOp unary_op) |
| 209 | { |
| 210 | decltype(unary_op(*container.begin())) ret; |
| 211 | bool first{true}; |
| 212 | for (const auto& item : container) { |
| 213 | if (!first) ret += separator; |
| 214 | ret += unary_op(item); |
| 215 | first = false; |
| 216 | } |
| 217 | return ret; |
| 218 | } |
| 219 | |
| 220 | template <typename C, typename S> |
| 221 | auto Join(const C& container, const S& separator) |