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(new char[len]);
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
or ALT + 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 Select CDT 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.
First, 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++11
Now you can 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++11
into text box entitled other dialect flags
or select ISO C++11
from the Language standard
drop down.
For CMake project
Generate eclipse project files (inside your project)
mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
Then import generated directory to eclipse as standard eclipse project. Right click project and open
Properties
-> C/C++ General
-> Preprocessor Include Paths, Marcos etc.
-> Providers
enable CDT GCC Build-in Compiler Settings
and move it higher than Contributed PathEntry Containers
(This is important)
Last Common Step
recompile, regenerate Project
->C/C++ Index
and restart Eclipse.
Eclipse C/C++ does not recognize the symbol std::unique_ptr
even though you have included the C++11 memory header in your file.
Assuming you are using the GNU C++ compiler, this is what I did to fix:
Project -> Properties -> C/C++ General -> Preprocessor Include Paths -> GNU C++ -> CDT User Setting Entries
Click on the "Add..." button
Select "Preprocessor Macro" from the dropdown menu
Name: __cplusplus Value: 201103L
Hit Apply, and then OK to go back to your project
Then rebuild you C++ index: Projects -> C/C++ Index -> Rebuild
For me on Eclipse Neon I followed Trismegistos answer here above , YET I also added an additional step:
Hit apply and OK.
Cheers,
Guy.
I 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.