Click to See Complete Forum and Search --> : C++0x language feature checklist


jwfearn
December 9th, 2008, 10:22 PM
Hi Microsoft!

I use vc9 every day and I love it. I'm looking forward to vc10 and I hope it will support many more C++0x features than the four announced so far.

I admit I haven't read the C++0x draft spec in detail, but this wikipedia article (http://en.wikipedia.org/wiki/C%2B%2B0x) has a decent summary of its new features.

Below is a list of C++0x language features culled from the aforementioned wikipedia summary as well as what I've heard so far as to their support in vc10. Would you folks care to let us know as to which of the other features might make it in for the release version of vc10?

vc10 C++0x LANGUAGE FEATURE
-----------------------------------------------------------------------
YES - Rvalue reference and move semantics
? - Generalized constant expressions
? - Modification to the definition of plain old data
? - Extern template
? - Initializer lists
? - Uniform initialization
YES - auto / Type determination
? - Range-based for-loop
YES - Lambda functions and expressions
? - Alternate function syntax
? - Concepts
? - Object construction improvement
? - nullptr
? - Strongly typed enumerations
? - Angle bracket fix
? - Explicit conversion operators
? - Template typedefs
? - Transparent garbage collection
? - Unrestricted unions
NO - Variadic templates
? - New string literals
? - User-defined literals
? - Multitasking memory model
? - Thread-local storage
? - Defaulting/deleting of standard functions on C++ objects
? - Type long long int
YES - Static assertions
? - sizeof on members without explicit object

Thanks!

jwfearn
December 10th, 2008, 12:07 PM
And conversely, could you also please comment on which features will NOT be in the release version of vc10?

I understand that concepts is a NO, any others?

joncaves
December 10th, 2008, 01:11 PM
Here's my answer:

YES - Rvalue reference and move semantics
No - Generalized constant expressions
No - Modification to the definition of plain old data
YES- Extern template (note: we have supported this since at least Visual C++ 4.0)
No - Initializer lists
No - Uniform initialization
YES - auto / Type determination
No - Range-based for-loop (require concepts)
YES - Lambda functions and expressions
? - Alternate function syntax - what is this?
No - Concepts
No - Object construction improvement
No - nullptr
No - Strongly typed enumerations
YES - Angle bracket fix (this is in Visual C++ 2008)
No - Explicit conversion operators
No - Template typedefs
No - Transparent garbage collection
No - Unrestricted unions
No - Variadic templates
No - New string literals
No - User-defined literals
Probably - Multitasking memory model
YES - Thread-local storage (but still using the Microsoft extension)
No - Defaulting/deleting of standard functions on C++ objects
YES - Type long long int
YES - Static assertions
No - sizeof on members without explicit object

jwfearn
December 10th, 2008, 02:14 PM
Thanks for the clarifications, very helpful!

re: Alternate function syntax, see:
http://en.wikipedia.org/wiki/C%2B%2B0x#Alternate_function_syntax
for explanation.

BTW, kudos to MS for adding C++0x features. IMHO you've made good choices of prioritizing based on spec stability and user needs.

joncaves
December 10th, 2008, 03:30 PM
Ah: this feature is officially known as "late specified return type" and it will be supported in Dev10. What I understand by "alternate function syntax" was a proposal to unify the syntax used for lambdas and functions into one form. Something like:


[] f(int) -> int
{
return 42;
}


This proposal was rejected at the last C++ Committe meeting though I suspect it might re-appear.

KrisG
December 10th, 2008, 08:12 PM
Here's my answer:
No - Initializer lists
No - Uniform initialization


No initializer lists or uniform initialization? Boo, those were my personal pet features I would've liked to see, I find the C++ initialization bugaboos they fix annoying. Oh well I've waited this long, what's a few more years....

Russco
December 10th, 2008, 09:24 PM
I was looking forward to strongly typed enums and template typedefs and maybe unrestricted unions though cant remember the last time I used a union but thats maybe because as they are they are not particularly useful except for the alignment trick annotated in Modern C++ Design.

Andrew Hain
December 11th, 2008, 04:39 AM
I’m surprised not to see strongly typed enums as I thought they were based on managed C++ enums.

Also, what is the timescale for a future release with the rest of C++0x?

Russco
December 11th, 2008, 11:19 AM
Can we expect more c++0x goodies coming in service packs or will they be for bugfixes alone and have to wait for msvc11 for more c++0x goodies?

Damien Watkins
December 11th, 2008, 08:55 PM
Hello

I would not “expect” C++0x goodies to arrive in Service Packs (I know TR1 did arrive in a Service Pack - so it can happen - but I would not want this to be any type of expectation.)

Thanks
Damien

jalf
December 12th, 2008, 01:09 AM
I'd like to know what kind of C++0x support you're aiming for in the long term. Browsing through the minutes of the C++ committee meetings, it looks like Microsoft has attempted to veto a handful of proposals, with varying success. In particular, it looks like MS refused to ever implement the new attributes, even though they were accepted into the standard in the end. Is that decision final? We're never going to see a compliant implementation of C++0x from you?

As for your prioritization for VC10, I think you've made some sensible choices. Shame so many features had to be left out, but given that you're targeting essentially the same launch window as the new standard itself, I can't blame you. ;)

jwfearn
December 12th, 2008, 11:02 AM
@jalf, could you please post some links to the "new attributes" discussion you mention? I'd like to read up on this.

cj-wijtmans
December 12th, 2008, 11:55 AM
Sorry to say this, but how can you say no to template typedefs?
Do i really need to make wrapper classes to do this simple typedef thing?

Another thing is when all template parameters are default you must type <> after the typename.
Its annoying..

joncaves
December 12th, 2008, 01:48 PM
Some comments on the previous posts - mostly in reverse order

template typedefs - while this is relatively simple to implement we felt that it just didn't provide as much value as the features we did choose implement: and as you state there is a simple work-around.

Not requiring the "<>" when all the template parameters are defaulted - this is not possible in C++ (even in C++-0x). You must let the compiler know that this is a specialization of a class template otherwise parsing will fail.

I still think that the proposal to add attributes to C++ is misguided and over simplistic: also Visual C++ users already have 3 ways to add meta-information to a program (declspec, pragma, attributes) - they don't need a fourth way. I am not saying we'll never support this feature - but it will always be somewhere near the bottom of the stack.

We will add more C++-0x features in the future - but what and when is currently unknown: it all depends on user feedback.

jwfearn
December 12th, 2008, 02:02 PM
Regarding "new attributes", I believe @jalf is referring to these meeting minutes:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2784.html
which reference this proposal:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf

cj-wijtmans
December 12th, 2008, 03:33 PM
@joncaves

im sorry for not being pecific but i wasnt talking about template specialization i was talking about defining variables... Tho its been a along time since i used "typename<> variable".
Sorry again for not being pecific. Im not sure if its any diffrent now from the last time that i used VC++ with default template parameters

And your right there is a work around but its really annoying using ::T bit, and i get tangled in giving the classes the name i wanted to give.

Lindley
December 12th, 2008, 05:06 PM
The only attribute I've ever used is GNU's "unused" to avoid a warning on static functions that don't get called. At present I don't believe VS2005 warns for that, so I haven't needed the MS version. That said, if there *were* a standard specification for such things, I might use them more often.

One of the things I hate doing is writing code that ties me to a particular compiler. I always #ifdef such code and provide alternatives when it's necessary, but that can get messy. So anything that reduces the need to do that is a good thing.

TheCPUWizard
December 12th, 2008, 05:20 PM
I have to agree with Lindley on this one [yes, it does happen. ;)].

For the "standard" attributes which have a direct (or very close) mapping to the existing Visual C++ attributes, it would be a BIG help if the standard syntax was supported [this should primarilty impact the lexical analysis and not the internals of the compiler].

For those which do not match, having them parsed and either generating a "non-supported" error, or an "ignored" warning (ideally configurable between the two) would be a great help in keeping source code "clean".