Quote Originally Posted by Elysia
Where does it say C++ uses garbage collection? If you are referring to C#, Java, etc, then I see an alternative to those languages if you absolutely must not have garbage collection: C++.
I'm well aware C++ does not use garbage collection. The point is that Rust gives you many of the advantages of garbage collection, without imposing many of the disadvantages of having a GC, of which there are many.

That a subset of C is still part of C++ is not a fundamental weakness because you don't need to use it. Sure, you could argue that because it is there, other problems arise, such as the need for compatibility, making sure that new stuff works with the C subset, etc. However, even so, I do not consider it a fundamental weakness. Every language that evolves has some old, deprecated style, libraries, classes, etc. You need to make sure you don't break compatibility with such code, and you need to make sure new stuff works with old stuff because that's what compatibility is all about. If you don't have that problems, then your language is broken because software stays around for a long time. Rust may not have it yet, but it will. So if you, give some other example. I will not cede to that one you gave.
Having the entire C language contained within C++ is a fundamental weakness for other reasons than those you mention:

1. A proficient C++ programmer needs to be (nearly) fluent in C to be able to write and read good C++ code, even though the overlap between good C++ code and good C code is at this point nearly inexistant.
2. The presence of C discourages new C++ programmers from properly adopting the object oriented mindset.
3. Many of the flaws and inconsistencies of the language is directly due to the C legacy, silly things like arrays decaying to pointers for no good reason.
4. Even though the presence of many C features does not force a programmer to use them, their presence still means that somebody will choose to use them. If there is never any good reason to use C-style casts or void pointers, then why are they in the language? Oh, because they have to be, because they are in C.

I also consider the size and complexity of C++ to be a weakness. I don't know if i'd call it a fundamental weakness but it certainly doesn't seem like something that is fixable.
1. The larger the language is, the longer it will take to learn and get comfortable with.
2. Even though a newcomer to C++ does not plan to make use of some of the more esoteric features of the language, he will still have to learn them if he wants to be able to read and understand code that does use those features. The argument that you don't need to learn it all is not sound IMO.
3. The complexity of the language is showing in the syntax. The grammar is so huge and unwieldy that we need to put 'typename' or 'template' everywhere for the compiler to be able to comprehend what our intentions are. Let that sink in, C++ forces us to make our code less humanly readable so the compiler actually knows what we're talking about. This is the exact opposite of what a programming language is supposed to do: Make code _more_ humanly readable while still being machine comprehensible. Look at the '...' operator in C++11, it has a million different uses. Parameter packs (both unpacking and packing depending on the context), C-style variadic functions, catch-all notation for exceptions. No wonder the compiler vendors are having a hard time with the language. How long did it take for us to not have to put a space between the greater than operators in std::vector<std::vector<int>>?
4. A large and complex language means large and complex compilers, which means more proneness to errors and security flaws, longer compilation times, fewer standard compliant compilers available and so on and so forth. You all know why it is advantageous to have _less_ code. Somehow most C++ enthusiasts fails to make the connection that less complexity in the language is equally advantageous.

Heck, even the standards committee finds that the language has become to complex, but they can do nothing about it for backwards compatibility reasons.

Phantomotap:

That is a good post, and it deserves a better answer than what i have time for at the moment :-)