path: root/src
diff options
authorGiuseppe D'Angelo <>2020-01-11 12:36:01 +0100
committerGiuseppe D'Angelo <>2020-01-12 23:52:37 +0100
commita16c37b78fff5c4b24328d52bf9b2c7f57db0d12 (patch)
tree920b8d22318c2ea3addaf2db9aa3118ba6a2b3ac /src
parent76c4c5d5581b2cd36a043234eb167dd55041301d (diff)
Enforce that char16_t / char32_t are 16/32 bits
The standard makes them as big as int_least16_t / 32_t, i.e. big enough to hold UTF-16 / UTF-32 code units. We're relying on them to be *exactly* 16/32 bit instead. Drive by: move the check that a char is 8 bits before saying that some other type is not its expected sizeof() * 8. Change-Id: Idbf3d33331667d417702d9dde221905bcfc4d021 Reviewed-by: Thiago Macieira <>
Diffstat (limited to 'src')
1 files changed, 3 insertions, 1 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 20046e3fcf..da69628d2b 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -139,10 +139,12 @@ Q_CORE_EXPORT void *qMemSet(void *dest, int c, size_t n);
// in. The idea here is to error or warn if otherwise implicit Qt
// assumptions are not fulfilled on new hardware or compilers
// (if this list becomes too long, consider factoring into a separate file)
-Q_STATIC_ASSERT_X(sizeof(int) == 4, "Qt assumes that int is 32 bits");
Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits");
+Q_STATIC_ASSERT_X(sizeof(int) == 4, "Qt assumes that int is 32 bits");
Q_STATIC_ASSERT_X(QT_POINTER_SIZE == sizeof(void *), "QT_POINTER_SIZE defined incorrectly");
Q_STATIC_ASSERT_X(sizeof(float) == 4, "Qt assumes that float is 32 bits");
+Q_STATIC_ASSERT_X(sizeof(char16_t) == 2, "Qt assumes that char16_t is 16 bits");
+Q_STATIC_ASSERT_X(sizeof(char32_t) == 4, "Qt assumes that char32_t is 32 bits");
// While we'd like to check for __STDC_IEC_559__, as per ISO/IEC 9899:2011
// Annex F (C11, normative for C++11), there are a few corner cases regarding