change C++ version in visual studio - c++

How to check the version of C++ in Visual C++ Express Edition 2010 and change it to C++11?
I've tried to use uniform initialization like std::vector<std::string> v{"Hello" , "World"};, but it doesn't work.

You cannot change the C++ language version used by Visual Studio 2010. It does have partial support for C++11, but since VS 2010 was released before the C++11 standard was finalized, certain features are not exactly in-line with the standard, and furthermore not all features have been implemented.
See this chart for a list of which C++11 features are supported in various major compilers and the versions at which they became available.

Unfortunately, that is not implemented in the compiler yet, not even in VS 2012.

Visual C++ does not support uniform initialization at present time. The most recent compiler CTP release (for Visual Studio 2012, not 2010) has support for it, but that is an alpha-quality product. Moreover, there is no standard library support in there yet, so you still wouldn't be able to use uniform initialization with vector.
(In any case, how would you expect C++2011 to be supported on MSVC++2010?)

Related

How to "activate" c++11 standard in visual studio 2010?

I am new to c++ programming and I need to use the Thread class in my VS 2010 project.
I've found this reference, but when I try the following:
#include <thread>
VS 2010 obviously tells me 'Error: cannot open source file "thread"'. I understand that I need to "activate" c++11 standard somehow. I do not even know where to start.
So what should I do to use () c++11 standard in visual studio 2010?
std::thread is obviously not in VS 2010. I think it was added with VS 2012, which is also supported by this question and answer. Is there any specific reason you're using 2010 rather than the latest version, 2013, which supports far more part of C++11?
Also to note: Contrary to GCC, MSVC doesn't have an "opt-in" for newer standards. It just supports them out of the box as far as implemented.
The Visual C++ compiler is not fully C++11 compatible. C++11 features had been supported since Visual Studio 2010 and added incrementally. Not even the next version of Visual Studio will provide full C++11 compatibility. A matrix of C++11 features available in different versions of Visual Studio can be found here:
C++0x Core Language Features In VC10: The Table
C++11 Features in Visual C++ 11
C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013
C++11 is enabled by default, but there is not many features implemented in VS 2010. C++11 standard library is missing many headers in VS 2010. Here is a comparison of a last few VS releases regarding the C++11 support.
Here's what I've found by myself.
To "activate" c++11 in visual studio you need to set "Platform Toolset" in project->properties to v110 or above. So that's how visual studio will understand that it should use c++11 features.
BUT!
The Visual C++ compiler is not fully C++11 compatible. C++11 features had been supported since Visual Studio 2010 and added incrementally. Not even the next version of Visual Studio will provide full C++11 compatibility.
Marius Bancila
So it worked for <thread> (and <future>) in visual studio 2012.
As I suggest it's impossible to set Platform Toolset above v100 in vs2010, so it's impossible to "activate" c++11 in vs2010.
Conclusion:
to use c++11 standart features in visual studio you will need to use 2012 and higher version which supports Platform Toolset v110 and above.
Correct me please if I'm wrong!
d= (◕‿↼ ) C++11 is enabled by default, But unfortunately, not even "Visual Studio 2017" is fully C++11 compliant.
(I got here while building Boost, which's build section only mentions their need for C++11 compliant compiler, and NOT with what MSVC version they tested Boost.)
Microsoft says:
"Support for C11 and C17 standards is available in Visual Studio 2019 version 16.8 and later"
But I didn't test their claim yet.

Can I set the Visual Studio compiler to conform to a specific version of c++?

Can I set the Visual Studio compiler to conform to a specific version of c++ (e.g. C++03 or C++11)? If so, how?
I'm using Visual Studio 2010.
No, you can't. Pretty much the only flag for controlling the language is /Za (don't use Microsoft extensions), and that's so broken that the MS STL isn't even tested with it, and parts might not compile - not to mention the Windows SDK headers.
VS2010 obviously can not be set to C++11 compatibility. (less obviously 2012 can't be either...)
As for C++03 it is fairly compatible, you can find the short list of differences in msdn. Also the options to turn off extensions, though that switch has no practical use.

Visual express c++ with C++11 and threads support

I am currently using Visual Express C++ (2010) for my project, but I am looking at features in C++11 (thread support). This does not seem to be supported in Express 2010.
From my research so far it looks like I will need Visual Express C++ 2012 version to get support for this (http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx)?
Cite from this page:
In VC11, we intend to completely support the C++11 Standard Library, modulo not-yet-implemented compiler features. (Additionally, VC11
won't completely implement the C99 Standard Library, which has been
incorporated by reference into the C++11 Standard Library. Note that
VC10 and VC11 already have .) Here's a non-exhaustive list
of the changes we're making:
New headers:
<atomic>, <chrono>, <condition_variable>, <future>,<mutex>, <ratio>,
<scoped_allocator>, and <thread>.
So in summary:
What are my options to get Visual Express with <thread> support?
To get support for Visual Studio Express you either need Visual Studio Express 2012, or you can purchase my Just::Thread library, which provides the C++11 thread library for MSVC 2005 and later on Windows, and various versions of gcc across Windows, Linux and MacOSX.

Which version of C++ am I using?

Currently I am using C++ in Windows environment. I am using Visual Studio 2008 with Service pack 1.
I never thought about C++ version unless until I came to know about C++11. There appear to be different versions like ANSI standard, C++ 98 Standard etc.
How do I get to know which version of C++ am I using?
If I don't have Visual Studio I know I can use other Compilers like TC to compile my C++ code. In that case how can I get to know which version of C++ the compiler is using.
Are the changes made in consecutive C++ versions about Programming concepts or only in Language design?
It's not as simple as a version check.
Every compiler that supports some C++11 supports a different subset of C++11. No compiler advertises full compliance with C++11 yet, for obvious reasons.
The C++11 specification requires that a predefined macro, __cplusplus be defined which has the value 201103L. However, you cannot rely on this macro alone. Not in real code.
You instead have to rely on compiler-specific macros to tell when compiler and which version of that compiler you're using. Or you can use Boost.Config to help you detect whether specific features are supported.
Visual Studio 2008? You can forget C++11.
Visual Studio 2010 has some C++11 but it's buggy.
Visual Studio 2012 has better C++11 for some features, but others are missing.
Visual Studio 2013 has new support for variadic templates and other features.
But VS is behind other compilers such as gcc in C++11 support.
You can download free express editions for all these versions.

C++11 features in Visual Studio 2012

A preview version of Visual Studio 2012 (the next version after VS2010) is now available.
Does anyone know what new C++11 features it supports? (I'm not in a position to try it out at the moment).
It's worth noting that Visual Studio 2010 already had quite a bit of early C++11 support. So to summarize what is already linked to in other answers, here is what is new in Visual Studio 11 that was not part of Visual Studio 2010:
rvalue references to version 2.1 from 2.0
lambdas to version 1.1 from 1.0.
decltype to version 1.1 from 1.0(not yet available in developer preview)
Improved, but still incomplete, Alignment
completed strongly-typed enums
forward declared enums
Standard layout and trivial types
Atomics
Strong compare and exchange
Bi-directional fences
Data-dependency ordering
Range-based for loop
In early November 2012, Microsoft announced the Visual C++ Compiler November 2012 CTP, which adds more C++11 functionality to Visual Studio 2012:
uniform initialization
initializer lists
variadic templates
function template default arguments
delegating constructors
explicit conversion operators
raw strings