Don't use the gcc extension for QStringLiteral & Q_ARRAY_LITERAL
The extension doesn't work outside of function scopes, so a function declaration such as void foo(const QString &str = QStringLiteral("bar")); would fail on certain gcc versions. Change-Id: I2971301f2859edd3fc81b95dfa5a7c15f29e395c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
1c86619037
commit
69478da0f0
@ -315,14 +315,6 @@ struct QArrayDataPointerRef
|
||||
return StaticWrapper::get(); \
|
||||
}()) \
|
||||
/**/
|
||||
#elif defined(Q_CC_GNU)
|
||||
// Hide array within GCC's __extension__ {( )} block
|
||||
#define Q_ARRAY_LITERAL(Type, ...) \
|
||||
__extension__ ({ \
|
||||
Q_ARRAY_LITERAL_IMPL(Type, __VA_ARGS__) \
|
||||
ref; \
|
||||
}) \
|
||||
/**/
|
||||
#endif
|
||||
#endif // defined(Q_COMPILER_VARIADIC_MACROS)
|
||||
|
||||
|
@ -167,22 +167,6 @@ Q_STATIC_ASSERT_X(sizeof(qunicodechar) == 2,
|
||||
}()) \
|
||||
/**/
|
||||
|
||||
# elif defined(Q_CC_GNU)
|
||||
// We need to create a QStringData in the .rodata section of memory
|
||||
// and the only way to do that is to create a "static const" variable.
|
||||
// To do that, we need the __extension__ {( )} trick which only GCC supports
|
||||
|
||||
# define QStringLiteral(str) \
|
||||
QString(__extension__ ({ \
|
||||
enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \
|
||||
static const QStaticStringData<Size> qstring_literal = { \
|
||||
Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size), \
|
||||
QT_UNICODE_LITERAL(str) }; \
|
||||
QStringDataPtr holder = { qstring_literal.data_ptr() }; \
|
||||
holder; \
|
||||
})) \
|
||||
/**/
|
||||
|
||||
# endif
|
||||
#endif // QT_NO_UNICODE_LITERAL
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user