1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
Index: /icu/trunk/source/test/intltest/strtest.cpp
===================================================================
--- /icu/trunk/source/test/intltest/strtest.cpp (revision 32779)
+++ /icu/trunk/source/test/intltest/strtest.cpp (revision 32780)
@@ -1,5 +1,5 @@
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2011, International Business Machines Corporation and
+ * Copyright (c) 1997-2012, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
@@ -95,5 +95,5 @@
StringTest::Test_U_STRING() {
U_STRING_INIT(ustringVar, "aZ0 -", 5);
- if( sizeof(ustringVar)/sizeof(*ustringVar)!=6 ||
+ if( u_strlen(ustringVar)!=5 ||
ustringVar[0]!=0x61 ||
ustringVar[1]!=0x5a ||
Index: /icu/trunk/source/common/unicode/ustring.h
===================================================================
--- /icu/trunk/source/common/unicode/ustring.h (revision 32779)
+++ /icu/trunk/source/common/unicode/ustring.h (revision 32780)
@@ -940,5 +940,5 @@
*/
#if defined(U_DECLARE_UTF16)
-# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=U_DECLARE_UTF16(cs)
+# define U_STRING_DECL(var, cs, length) static const UChar *var=(const UChar *)U_DECLARE_UTF16(cs)
/**@stable ICU 2.0 */
# define U_STRING_INIT(var, cs, length)
Index: /icu/trunk/source/common/unicode/platform.h
===================================================================
--- /icu/trunk/source/common/unicode/platform.h (revision 32779)
+++ /icu/trunk/source/common/unicode/platform.h (revision 32780)
@@ -665,7 +665,7 @@
* gcc 4.4 defines the __CHAR16_TYPE__ macro to a usable type but
* does not support u"abc" string literals.
- * C++11 requires support for UTF-16 literals
+ * C++11 and C11 require support for UTF-16 literals
*/
-# if (defined(__cplusplus) && __cplusplus >= 201103L)
+# if (defined(__cplusplus) && __cplusplus >= 201103L) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)
# define U_HAVE_CHAR16_T 1
# else
Index: /icu/trunk/source/common/unicode/umachine.h
===================================================================
--- /icu/trunk/source/common/unicode/umachine.h (revision 32779)
+++ /icu/trunk/source/common/unicode/umachine.h (revision 32780)
@@ -257,5 +257,5 @@
/**
* \var UChar
- * Define UChar to be char16_t, if available,
+ * Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t),
* or wchar_t if that is 16 bits wide; always assumed to be unsigned.
* If neither is available, then define UChar to be uint16_t.
@@ -267,8 +267,8 @@
* @stable ICU 4.4
*/
-
-/* Define UChar to be compatible with char16_t or wchar_t if possible. */
-#if U_HAVE_CHAR16_T
- typedef char16_t UChar;
+#if defined(UCHAR_TYPE)
+ typedef UCHAR_TYPE UChar;
+/* Not #elif U_HAVE_CHAR16_T -- because that is type-incompatible with pre-C++11 callers
+ typedef char16_t UChar; */
#elif U_SIZEOF_WCHAR_T==2
typedef wchar_t UChar;
|