Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
This is an example of a piece of C++11 code:
auto text = std::unique_ptr<char[]>(new char[len]);
The Eclipse editor complains about:
Function 'unique_ptr' could not be resolved
The Makefile compilation works fine. How to make Eclipse stop complaining about these sort of errors?
Neither the hack nor the cleaner version work for Indigo. The hack is ignored, and the required configuration options are missing. For no apparent reason, build started working after not working and not providing any useful reason why. At least from the command line, I get reproducible results.
I can't yet comment so am writing my own answer:
It's related to
__GXX_EXPERIMENTAL_CXX0X__
and it's valid for Eclipse Juno and CDT 8.x.Some parts of this answer are already covered in other answers but I want it to be coherent.
To make it possible to build using stdc++11, one have to add specific flag for compiler. You can do that via project properties. To modify project properties
RMB
andProject properties
orALT + ENTER
. Then C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous -> Other Flags. Put -std=c++11 at the end of line, for GCC it will look something like:-c -fmessage-length=0 -std=c++11
. By adding -stdc++11 flag compiler (GCC) will declare__GXX_EXPERIMENTAL_CXX0X__
by itself.At this point you can build project using all the goodness of C++11.
The problem is that Eclipse has it's own parser to check for errors - that's why you're still getting all the nasty errors in Eclipse editor, while at the same time you can build and run project without any. There is a way to solve this problem by explicitly declaring
__GXX_EXPERIMENTAL_CXX0X__
flag for the project, one can do that (just like Carsten Greiner said): C/C++ General -> Paths and Symbols -> Symbols -> GNU C++. Click "Add..." and past__GXX_EXPERIMENTAL_CXX0X__
(ensure to append and prepend two underscores) into "Name" and leave "Value" blank. And now is the extra part I wanted to cover in comment to the first answer, go to: C/C++ General -> Preprocessor Include Path Macros etc. -> Providers, and SelectCDT Managed Build Setting Entries
then click APPLY and go back to Entries tab, under GNU C++ there should be now CDT Managed Build Setting Entries check if inside there is defined__GXX_EXPERIMENTAL_CXX0X__
if it is -> APPLY and rebuild index you should be fine at this point.I found this article in the Eclipse forum, just followed those steps and it works for me. I am using Eclipse Indigo 20110615-0604 on Windows with a Cygwin setup.
-std=c++0x
(or for newer compiler version-std=c++11
at the end . ... instead of GCC C++ Compiler I have also Cygwin compiler__GXX_EXPERIMENTAL_CXX0X__
(ensure to append and prepend two underscores) into "Name" and leave "Value" blank.There is a description of this in the Eclipse FAQ now as well: Eclipse FAQ/C++11 Features.
Eclipse image setting
Update 2016:
As of gcc 6 (changes), the default C++ dialect is C++14. That means that unless you explicitly need a newer or older dialect than than, you don't need to do anything with eclipse anymore.
For Luna and Mars
This community wiki section incorporates the answer by Trismegistos;
1. Before creating project, configure Eclipse syntax parser:
Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings
in the text box entitled Command to get compiler specs append
-std=c++14
2. Create project, configuration depends on what kind of project you created:For project created as: File -> New -> Project -> C/C++ -> C++ Project
Right click on created project and open
Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Dialect
Put
-std=c++14
into text box entitled other dialect flags or select ISO C++11 from the Language standard drop down.There's now a new way to solve this without the GXX_EXPERIMENTAL hack.
For most recent versions: (Currently
Juno and KeplerLuna):Under newer versions of Juno the settings are located at
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Older versions 2012/2013:
Under C/C++ Build (at project settings), find the Preprocessor Include Path and go to the Providers Tab. Deselect all except CDT GCC Builtin Compiler Settings. Then untag Share settings entries … . Add the option -std=c++11 to the text box called Command to get compiler specs.
Go to paths and symbols. Under Symbols, click restore defaults, and then apply.
Notes:
Eclipse is picky about hitting apply, you need to do it every time you leave a settings tab.
[Self-promotion]: I wrote my own more detailed instructions based on the above. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Thanks to the user
Nobody
at https://stackoverflow.com/a/13635080/1149664I don't know if it is only me, the highest ranked solution doesn't work for me, my eclipse version is just normal eclipse platform installed by using sudo apt-get install eclipse in Ubuntu But I found a solution which adopts method together from both the highest ranked solution and the second, what I did to make it work is described as below (Note that the other steps like creating a C++ project etc. is ignored for simplicity)
Once you have created the C++ project
(1) C/C++ General -> Paths and Symbols -> Symbols -> GNU C++. Click "Add..." and paste GXX_EXPERIMENTAL_CXX0X (ensure to append and prepend two underscores) into "Name" and leave "Value" blank.
(2) Under C/C++ Build (at project settings), find the Preprocessor Include Path and go to the Providers Tab. Deselect all except CDT GCC Builtin Compiler Settings. Then untag Share settings entries … . Add the option -std=c++11 to the text box called Command to get compiler specs
After performed above 2 and 2 only steps, it works, the eclipse is able to resolve the unique_ptr, I don't know why this solution works, hope that it can help people.