The title is pretty self-descriptive. I've downloaded Qt Creator 2.7.0, and I am trying to compile some basic C++11 code:
int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
x *= 2;
}
I'm receiving the following error:
range based for loops are not allowed in c++ 98 mode
Yet, according to this article this version of Qt Creator supports C++11. So how do I enable it?
According to this site add
CONFIG += c++11
to your .pro file (see at the bottom of that web page). It requires Qt 5.
The other answers, suggesting
QMAKE_CXXFLAGS += -std=c++11
(or QMAKE_CXXFLAGS += -std=c++0x
)
also work with Qt 4.8 and gcc / clang.
Add this to your .pro file
QMAKE_CXXFLAGS += -std=c++11
or
CONFIG += c++11
As an alternative for handling both cases addressed in Ali's excellent answer, I usually add
# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}
to my project files. This can be handy when you don't really care much about which Qt version is people using in your team, but you want them to have C++11 enabled in any case.
add to your qmake file
QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS += -std=c++11
If you are using an earlier version of QT (<5) try this
QMAKE_CXXFLAGS += -std=c++0x
The only place I have successfully make it work is by searching in:
...\Qt\{5.9; or your version}\mingw{53_32; or your version}\mkspecs\win32-g++\qmake.conf:
Then at the line:
QMAKE_CFLAGS += -fno-keep-inline-dllexport
Edit :
QMAKE_CFLAGS += -fno-keep-inline-dllexport -std=c++11
Success story sharing
-std=c++11
, then it should also support (the deprecated)-std=c++0x
flag as well, and both flags are supposed to have identical effects (which apparently isn't the case on your machine). If a compiler supports-std=c++0x
, it doesn't mean that it understands-std=c++11
. Therefore, picking-std=c++0x
as default for C++11 compatibility mode is a reasonable choice. On my machine, at least according to the man page,-std=c++0x
and-std=c++11
are identical.-std=c++11
if the compiler supports it, and Qt could be smart enough to do so. Well, if this issue hurts you that much, you could file a bug report...