Closed Bug 1119075 Opened 10 years ago Closed 10 years ago

Use standard unicode string literals with VS2015

Categories

(Core :: MFBT, defect)

x86_64
Windows 8.1
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla38

People

(Reporter: briansmith, Assigned: briansmith)

References

Details

Attachments

(1 file)

VS2015 won't conpile mfbt/char16.h without this change. One thing I did not explore: Is MOZ_USE_CHAR16_WRAPPER still needed?
Attachment #8545588 - Flags: review?(jwalden+bmo)
(In reply to Brian Smith (:briansmith, :bsmith, use NEEDINFO?) from comment #0) > One thing I did not explore: Is MOZ_USE_CHAR16_WRAPPER still needed? That was added to support MingW compilation, since we historically used PRUnichar (now char16_t) and wchar_t more or less interchangeably on Windows. Given that Windows uses a lot of UTF-16-based APIs, I wasn't (and still am not) sure if they would add some extra variants or compiler magic when they eventually update the SDK. If a newer SDK adds char16_t* overloads, then it would probably be possible to get rid of it. If it doesn't happen, then it probably won't.
Comment on attachment 8545588 [details] [diff] [review] vs2015-unicode-literals.patch Review of attachment 8545588 [details] [diff] [review]: ----------------------------------------------------------------- Yeah, unless Microsoft did something special to allow Windows APIs to accept char16_t stuff (seems unlikely, but maybe they'll do it someday), the wrapper things are going to have to keep living. ::: mfbt/Char16.h @@ +17,5 @@ > * is a 16-bit code unit of a Unicode code point, not a "character". > */ > > #ifdef _MSC_VER > +#if _MSC_VER < 1900 Undefined macros expand to 0, so you can do #if defined(_MSC_VER) && _MSC_VER < 1900 here. (Technically not even the defined() is needed, then, but I'd rather see it for clarity.) Otherwise you'd have to indent these macro uses two spaces: #ifdef _MSC_VER # if _MSC_VER < 1900 /* * C++11 says... */ # define MOZ_UTF16_HELPER(s) ... typedef wchar_t char16_t; ... # endif #endif @@ +22,3 @@ > /* > * C++11 says char16_t is a distinct builtin type, but Windows's yvals.h > * typedefs char16_t as an unsigned short. We would like to alias char16_t Add a "(prior to MSVC 2015, which implemented C++11's distinct char16_t type)" here while you're in the neighborhood.
Attachment #8545588 - Flags: review?(jwalden+bmo) → review+
https://hg.mozilla.org/integration/mozilla-inbound/rev/1aac5e49e4bd (In reply to Jeff Walden [:Waldo] (remove +bmo to email) from comment #2) > Add a "(prior to MSVC 2015, which implemented C++11's distinct char16_t > type)" here while you're in the neighborhood. I added the comment, worded slightly differently. I also updated another comment. Please make sure the wording of those comments in the the checked-in patch is reasonable.
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla38
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
The wording is fine by me, but you have a stray ')' in there: ...implemented C++11's distinct char16_t type)...
(In reply to Jeff Walden [:Waldo] (remove +bmo to email) from comment #5) > The wording is fine by me, but you have a stray ')' in there: > > ...implemented C++11's distinct char16_t type)... Thanks for pointing that out. I fixed it: https://hg.mozilla.org/integration/mozilla-inbound/rev/3e4246e29bdc
See Also: → 1135583
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: