Of all your questions I've attempted, this is the toughest one, Christian.
First off, .NET and C++ (I will say only C++ in this message. But, When I say C++, include the frameworks and libraries built on and around it - MFC, ATL, WTL, etc.,) are entirely two different things. They exist to solve different problem sets and they cater to different consumers.
During the old days, there was not much of anything more than C/C++. There was another language known as VB, which was catering to an entirely different mass of programmers. VB was too easy to learn, someone quoted "as easy as falling a flight of stairs". But it had several drawbacks, which I won't be listing up here.
So, C/C++ was the prominent choice if you wanted to build high quality, efficient programs. Then the .NET framework came along, which introduced a lot of new features, which would be very difficult if you were to achieve that with C++.
So, the world witnessed a whole new array of fresh .NET programmers (programming became easy) and another mass of C++ guys shifted to .NET, even the "Big Dogs" of the C++ game (some of them being passionate towards technology, wanting to learn the new stuff, some other moved because .NET was easier to do and was the upcoming trend). With the days, .NET has grown to be a true giant, and is the choice for developing large scale business applications which usually involves networking, databases, client/servers, dynamic web-pages, etc.
As you've come from .NET background, I don't have to explain you how good is .NET while dealing with these things. It is the absolute gun, and C++ is no rival. But don't forget it: What .NET can do, C++ CAN do, faster, with lesser dependencies and cripples, lesser resources. But the cost and time of production will increase logarithmically and you will have to do a LOT of work yourself.
For example, when I had to write a server program that will be running 24x7, I wrote it in C#. Why? Because I don't have to bother about garbage collection or a remotest possible memory damage bug or memory fragmentation. But, when I had to write a program that will interpret bytes from a semi-intelligent terminal, before that is sent to the printer port and do some real-time processing on the buffer, I wrote it in C. Why? Because performance is of paramount importance there (read the word real-time
When it boils down to system side programming (desktop application development, device drivers, writing new funky frameworks like - uh... .NET, etc.,), C++ is the absolute choice. May I rephrase? Native programming and Managed programming exist for different purposes, so, they must be used wisely and appropriately.
And to talk about the opportunities, sadly the market for C++ devs are comparatively less (when compared to .NET), but is NOT DEAD, NOT OBSOLETE. And will never die.
[added] We, a lot of Visual C++ developers had been discussing this with MS that no significant amount of development was put by MS for the betterment of native language programmers. MS pretty much agreed on the point and gave us a very favorable reply (there's a lot of non-disclosure stuff that I cannot disclose here legally). They also released feature pack for Visual C++ 2008
], which has improved the features of the MFC framework tremendously. MS has clearly stated that their next version of Visual Studio will bring in a host of improvements for the C++ developers. [/added]
Theese C++ guys are the true Gurus, true Geeks. I say it because they prove it over and over, beyond any shadows of doubt, by creating technology (like .NET) that will be mass-consumed.
Christian Flutcher wrote:I know .NET framework and C# well.
There is no C++ vs .NET argument that would be of my least interest, but please don't forget this: "My compiler compiled your compiler".