Would std::basic_string be preferable to std::wstring on Windows?

I believe the time when it was advisable to release non-unicode versions of your application (to support Win95, or to save a KB or two) is long past: nowadays the underlying Windows system you'll support are going to be unicode-based (so using char-based system interfaces will actually complicate the code by interposing a shim layer from the library) and it's doubtful whether you'd save any space at all. Go std::wstring young man! -).

I believe the time when it was advisable to release non-unicode versions of your application (to support Win95, or to save a KB or two) is long past: nowadays the underlying Windows system you'll support are going to be unicode-based (so using char-based system interfaces will actually complicate the code by interposing a shim layer from the library) and it's doubtful whether you'd save any space at all. Go std::wstring, young man! -).

1 because the raw reason: On Windows, Unicode goes through wchar_t. Using char for characters on a windows-only code is beyond dumbness. I know.

I work with a VERY LARGE application using char with codepages and with localized strings for 10 languages... Eew... – paercebal Dec 27 '09 at 12:15 +1 Preach on! I used to take so much heat for this opinion that it's wonderful to hear someone else think the same way. – Frank Krueger Dec 27 '09 at 17:21 But on unix isn't std::string UTF8?

– Martin Beckett Feb 25 at 5:09.

I have done this on very large projects and it works great: namespace std { #ifdef _UNICODE typedef wstring tstring; #else typedef string tstring; #endif } You can use wstring everywhere instead though if you'd like, if you do not need to ever compile using a multi-byte character string. I don't think you need to ever support multi byte character strings though in any modern application. Note: The std namespace is supposed to be off limits, but I have not had any problems with the above method for several years.

2 Likewise, although I possibly didn't put it in the std namespace at the time. – mkb Jun 5 '09 at 15:41 Technically, it is not legal to add it to the std namespace. :) I doubt many compilers will actually complain about it, but the std namespace is technically off limits.

The only thing you're allowed to add to it is specializations of existing templates. – jalf Jun 5 '09 at 18:21 MSVC++ didn't complain :) – Brian R. Bondy Jun 5 '09 at 18:36 MSVC does not complain about a couple of things it should.

Namely the use (or lack of) of the typename keyword. – Loki Astari Jun 5 '09 at 19:47 1 +1. I use a similar construct to produce Unicode-enabled code that will work both on Windows (wchar_t) and Linux (char).

I understand the std namespace is off-limits, and thus, agree to pay the price if my own std::tstring is the cause of problems in my code. I have yet to see a problem. Now, for the current question, I would advise, for Windows-only code, to keep using std::wstring.

– paercebal Jun 5 '097 at 12:12.

One thing to keep in mind. If you decide to use std::wstring all the way in your program, you might still need to use std::string if you are communicating with other systems using UTF8.

1 If you're mixing wide and UTF8 strings, you can't rely on TCHAR anyway. – Mark Ransom Jun 6 '09 at 14:03.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions