Why not become a lifetime supporting member of the site with a one-time donation of any amount? Your donation entitles you to a ton of additional benefits, including access to exclusive discounts and downloads, the ability to enter monthly free software drawings, and a single non-expiring license key for all of our programs.

You must sign up here before you can post and access some areas of the site. Registration is totally free and confidential.

The article is like an updated, more concise version of his book "The Design and Evolution of C++", which I also recommend, though it's somewhat dated at this point.

The paper is a fascinating combination of technical discussion on language design conflicts, historical explanation for why things are they way they are, and political history of how hard it can be to manage a standards committee. Some very cool insider stuff.

I'm someone who has been coding in c++ for 20 years and has a love/hate relationship with the language. As I've discussed elsewhere I am not thrilled with C++0x. In fact it wouldn't surprise me terribly if the release of c++0x doesn't hasten the demise of the language.

However, I do think that there is an incredible amount to be learned from the decisions and struggles of the C++0x process, and it's must read stuff for anyone interested in the art of programming language design.

(if you are interested in this kind of stuff, do make sure you read the critique of c++ by Ian Joyner that i mention on the other thread).

In response to your not being thrilled with C++0x, I must say if C# was portable to a similar to extent as C++, I'd be there in short order. However, as mouse man knows, I am greatly adverse to proprietary languages, and I refuse to be taken up on C# by Microsoft. Perhaps something like D may strike my fancy if/when they get their finger out.

I think stuff like UTF8 literals is a mistake - internationalization resources really should be moved to external files.

I wonder why nullptr is necessary, '0' is clean enough in source code? (but perhaps this is template-magic related).

Dunno about regex being a core part of the language; it's useful, but you won't know about the speed of implementations if you're doing cross-platform stuff, so you're probably better suited using a thing like PCRE...

Threading and TLS support is a big win, I just hope the ABI for it is non-retarded.

foreach and lambda support is going to be cooooool

As a whole, I'm pretty mixed on C++0x. There's a bunch of good stuff in it, a bunch of whatever stuff, and a bunch of stuff that I feel will make the C++ platform somewhat bloated and a lot more effort for vendors to deploy. Also, it's a bit too late, and if you want to do cross-platform code, you probably won't have C++0x available on a lot of the platforms you're writing for...

Distinguishing between null and zero. The null pointer and an integer 0 cannot be distinguished well for overload resolution. For example, given two overloaded functions f(int) and f(char*), the call f(0) unambiguously resolves to f(int).1 There is no way to write a call to f(char*) with a null pointer value without writing an explicit cast (i.e., f((char*)0)) or using a named variable.

Naming null. Further, programmers have often requested that the null pointer constant have a name (rather than just 0). This is one reason why the macro NULL exists, although that macro is insufficient. (If the null pointer constant had a type-safe name, this would also solve the previous problem as it could be distinguished from the integer 0 for overload resolution and some error detection.)

Dunno about regex being a core part of the language; it's useful, but you won't know about the speed of implementations if you're doing cross-platform stuff, so you're probably better suited using a thing like PCRE...

I imagine unless they actually use PCRE for their implementation, it will be too little too late.