u16string is new in c++11. It may not be available everywhere