The code does not cover wide string (de-)serialization, because there is bare std::string in the code. There is still issue after changing all std::string to std::basic_string, because it assumes uint8_t (should be replaced by C) for character type:
for(size_t i=0; i<size; ++i) { str.at(i) = deserialize_helper<uint8_t>::apply(begin,end); }