Ticket #9452: boost_split_char16t.cpp

File boost_split_char16t.cpp, 1.3 KB (added by anonymous, 9 years ago)
Line 
1#include <iostream>
2#include <string>
3#include <vector>
4
5#include <boost/algorithm/string.hpp>
6
7template <typename TCharString, typename TArg>
8void Test(const TCharString& string_to_split, const TArg& split_by) {
9 std::vector<TCharString> result;
10
11 boost::algorithm::split(result, string_to_split, boost::algorithm::is_any_of(split_by));
12
13 std::cout << "[";
14 for (const auto& line : result) {
15 std::cout << "\"";
16
17 for (const auto symbol : line) {
18 if (symbol == 0) {
19 std::cout << "\\0";
20 } else {
21 std::cout << (char)symbol; // Not very good with char16_t, but enough to show the problem
22 }
23 }
24
25 std::cout << "\", ";
26 }
27
28 std::cout << "]" << std::endl;
29}
30
31int main() {
32 {
33 std::string str_to_split("a\0b\tc", 5);
34
35 Test(str_to_split, "\t"); // Outputs: ["a\0b", "c", ] --- correct
36 Test(str_to_split, std::string("\t")); // Outputs: ["a\0b", "c", ] --- correct
37 }
38
39 {
40 std::u16string str_to_split(u"a\0b\tc", 5);
41
42 Test(str_to_split, u"\t"); // Outputs: ["a", "b", "c", ] --- incorrect
43 Test(str_to_split, std::u16string(u"\t")); // Outputs: ["a\0b", "c", ] --- correct
44 }
45}