80std::vector<std::basic_string<CHAR>> split(
81 const std::basic_string_view<CHAR> str,
82 const std::basic_string_view<CHAR> sep,
85 using String = std::basic_string<CHAR>;
86 std::vector<String> parts;
98 if (!flags[SplitFlag::KEEP_EMPTY]) {
99 while (str.substr(pos1, sep.size()) == sep)
103 pos2 = str.find(sep, pos1);
105 auto token_len = pos2 - pos1;
108 token = str.substr(pos1, token_len);
110 if (flags[SplitFlag::STRIP_PARTS]) {
115 if (!token.empty() || flags[SplitFlag::KEEP_EMPTY]) {
116 parts.push_back(token);
119 if (pos2 == str.npos)