Actually, now that I think about it... C++'s & keyword really sucks.
It's like a crippled pointer. You can't "Reseat" it like you can in
Java
It's just for syntactic sugar, and it still manages to be wrong!!! Why
not just extend "." (dot) to just work with pointers or references?
That would be more like Java and better.
I'm not sure what your problem is. Please give concrete examples of
what you'd like to do bearing in mind that C++'s goals, that incidently
were very different to that of Java.
And also, why should we even need to define something as virtual or
not? Shouldn't the compiler know if you've subclasssed a function or
not? This virtual keyword is useless, harmful and annoying.
That's a great question. Both are useful. In C++ you can have both.
Why doesn't the compiler also ask me to tell it what registers to stuff
the params in? And if I don't know, it throws an error because it
secretly knew the answer already?
What are you talking about ? The "register" keyword serves a far
different purpose today than it did when compilers were less capable.
Today, the only thing you can count on is that a variable marked as a
register cannot have it's address taken at most giving the optimizer a
hint that the object is not aliased.
What a stupid system, to ask the programmer to tell the compiler
something it already knows, just so it can waste his time!!! Really
stupidity. If I were the designer of C++ I'd kill the 'virtual'
keyword.
That's nice, you're too late. You should have been around 20 years ago
when the discussions about C++ were evolving.
Also, putting functions into the class shouldn't really inline it...
The "inline" keyword should do that. We already have an inline keyword
so why imply that putting it in the class does the same???? It's
redundant. The more ways you have to do the same thing the more bloated
a language becomes
The meaning of "inline" and the compiler's choice to actually inline are
two very different things. You should file bugs with the compiler
vendor if you have a problem, you'll find they're very responsive.
Also, shared pointers (like what boost has got), should have been in
C++ by default, even if in the stl. And they should have been promoted
as more important to use than new/delete. new/delete are such overused
concepts, I really do my best to avoid them, but all too often I come
across libraries written by other people using them when they could
have used STL's string or container classes instead. It's annoying.
Smart pointers are relatively new. Compilers only until recently (last
6 years or so) were too buggy. You also have the option of using a
garbage collector -like in Java.
I think it should be easier to use a shared pointer than it is to do
new/delete. That would be an "implicit" recommendation to do it a
certain way. If you make one technique easier, you are basically
recommending it even if you haven't said "go down this path".
No argument. Personally, I don't like boost's shared_ptr, I prever
intrusive reference counts since they cause (imho) less issues.
And it shouldn't be possible to use templates on templates, unless they
are typedeffed first

Template madness really hurts the eyes.
Ah - welcome to the world of programming the compiler. Templates are an
extremely powerful concept but it does need the user to think very very
differently about programming.
And C++ should have specified some standardised name mangling. Because
linking C++ libraries is impossible due to Bjorne's oversight here. He
should have seen this one ahead of time...
Not at all. There are other much easier ways to do these things that
require no knowledge of name mangling. If you look at the Austria C++
generic factory implementation. It works with dynamically linked
libraries and with absolutely no knowledge of name mangling.
.... Also, the 'this' keyword
should always be the first parameter in terms of the actual stuff going
on in the registers.
Why do you care?
C++ certainly has a number of warts, but it is a far more powerful
language than C. I have not followed JAVA recently, but in my opinion
it has much more flexibility than Java as well but that does mean you
need to put in the time to know the language. When I started messing
with C++ there were very few examples of good uses of C++ so the
learning curve was a bit longer, now that has changed, there are many
good examples of C++ applications that are very very good. The
compilers have only recently (last 2 years) caught up with the standard.
My advice to you is, don't expect C++ to be perfect, it is what it is
and the quicker you learn what it is and stop being frustrated, the
quicker you'll be up the learning curve and useful. Bitching about it
isn't going to help.
As for the perfect langauge, don't hold your breath, if C++/Java etc are
any indication, it will take a long time to get here so you had better
learn to use the tools you have. Still, that should not preclude you
from dreaming about what the perfect language looks like, just don't
expect it to appear unless you're willing to put in some serious energy.