I recommend very much against L"", _T(), std::wstring (the latter is not multiplatform) and Microsoft recommendations on how to do Unicode.
There's a lot of confusion on this subject. Some people still think Unicode == 2 byte characters == UTF-16. Neither equality is correct.
In fact, it's possible, and even better to stay with char* and the plain std::string, plain literals and change very little (and still fully support Unicode!).
See my answer here at "Should UTF-16 be considered harmful?": https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful/1855375#1855375https://softwareengineering.stackexchange.com/a/102215 for how to do it the easiest (in my opinion) way.