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:
Lars Knoll 2012-06-11 16:08:55 +02:00 committed by Qt by Nokia
parent 1c86619037
commit 69478da0f0
2 changed files with 0 additions and 24 deletions

View File

@ -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)

View File

@ -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