Well, as I mentioned, VC2005 breaks a lot of stuff from earlier versions because it's more strict and standards compliant.
Class member functions is only one example of where it will break existing code.
Of course, this is not doable in all circumstances. So I think the rule to avoid complex types in interfaces is a bit strict and should be only applied if the project type demands it.
For example, for lot of projects my company specifies whole buildings, containing computers, containing OS and modules (built only by us) :) Never will there be a situation there we need to upgrade single components build with a different compiler or something similar.
Necessarily the advice needs to be taken with a grain of salt. The notion that "just because it may happen one day" is not always (rarely is from a business perspective) a good argument.
Do the rest agree that C++ has the best libraries? Or in any case very good ones?
Also, does it has good libraries for making a GUI compared to the others?
Generally, in which fields each of the above languages would be A LOT more useful? That would help me choose :)
GUI development in C++ is terror (IMO) and takes like 10x-50x as long to develop compared with say C#. Sure you could get a faster UI in C++ but this is neglectable in 90% of the cases.
It depends on the frameworks much more than on the language. Most frameworks have bindings for several languages. What makes it in C# easier to say: "draw a window and put some controls in it" than in c++ in your opinion?
Using frameworks linke wxw or qt you even don't need to do that. instead just compose the gui with a wysiwyg editor and interface it from your application.
In general, the only thing which may increase development productivity while using other procedural/OO languages than C++ in my experience is the bundling of extended frameworks together with the compiler/interpreter/ide. In C++ you need to put this together yourself. But that matters only for very small projects (<1 week) I think.
Other stuff like memory management is just FUD imo. I can't remember more than one or two situations in which I had to deal with it myself. And that was things you just can not do in some other languages at all.
Bothersome? Nonsense, says I.
Unlike some other languages, C++ makes you carefully think about your design, and memory should be no different.
It's what makes C++ C++! The language we all love :D
I'm not all too familiar with C#, but I wouldn't dismiss Magos comment on a rush. Drawing from my VB experience, it's undeniable that I could produce complex GUI applications for Windows only in a fraction of the time I can today with C++.
Languages like C# and VB.Net are tailored to handle these environments. What would be surprising was if they didn't offer rapid application development at a higher satisfaction rate than C++ based libraries, or even MFC based RADs. WxWidgets, for instance offers RAD development through some of the tools you can purchase separately. They are however not nearly as sophisticated as Windows Forms nor they provide the necessary features to extend RAD development to anything but the simplest GUI applications. And definitely, they are too tied to the code to offer a real alternative for complex applications since only a fool would sacrifice functionality for design on this case.
I base all my wxWidgets application GUI development on the following sub phases. I include also average development times (1, being some unit of time)... Take this with a grain of salt, naturally.
1 - RAD development of window's controls layout (time: 1)
2 - Go back to code, alter generated code to conform with code design decisions, trim and optimize the unnecessary bits and provide at least minimum extensibility. (time: 1.5 to 2 or 3 depending on the complexity of the layout).
It's phase two that most RADs need to concentrate on in order to earn the title. I have only very minimal experience in Windows Forms, having tried it out of curiosity a couple of times while looking at C# features some 12 months ago. But I have many flight hours under wxWidgets (being my current and favorite C++ GUI library), and by no means any of its the RAD tools match real life needs on a scale larger than the simplest applications.
Despite my obvious bias towards C++ and my obvious preference for wxWidgets, anyone will have an hard time convincing me some C++/Qt/wxWidgets/MFC combination can match the development speeds and the features of C# or VB.Net under Windows Forms.
C++'s power and versatility are indispensable for application domains you really need it for. For others, however, the language tends to get in the way. Just my $0.02.
You may to worry a bit more about memory when you do real designs such as memory allocators, functors, etc.
It seems logical also to me that newer language offer better libraries/tools. But I would like to know one language for everything. So, considering that I don't know what my feature job will require, do you think I should go for C++ or something newer, like C# or Java?
What do companies prefer for you to know. Which language is better on what field?