#include #include #include #include template void Test(const TCharString& string_to_split, const TArg& split_by) { std::vector result; boost::algorithm::split(result, string_to_split, boost::algorithm::is_any_of(split_by)); std::cout << "["; for (const auto& line : result) { std::cout << "\""; for (const auto symbol : line) { if (symbol == 0) { std::cout << "\\0"; } else { std::cout << (char)symbol; // Not very good with char16_t, but enough to show the problem } } std::cout << "\", "; } std::cout << "]" << std::endl; } int main() { { std::string str_to_split("a\0b\tc", 5); Test(str_to_split, "\t"); // Outputs: ["a\0b", "c", ] --- correct Test(str_to_split, std::string("\t")); // Outputs: ["a\0b", "c", ] --- correct } { std::u16string str_to_split(u"a\0b\tc", 5); Test(str_to_split, u"\t"); // Outputs: ["a", "b", "c", ] --- incorrect Test(str_to_split, std::u16string(u"\t")); // Outputs: ["a\0b", "c", ] --- correct } }