I would suggest D, if you'd like to see what C++ should have been (in my opinion).
That said, D has a small community and is constantly changing... and may never be standardized... so unfortunately it's not suited for "real" work.
More on topic: I don't know which would be better between C++ and C# for game development. Isn't XNA dead yet?
C# is similar to C++. But then so is every other imperative programming language. They're all based off of the same concepts that after you've picked one up it's pretty easy to pick up the next -- you don't have to relearn semantics, just syntax.
I've heard that C# is wonderful for game programming
This would only be because of engines such as XNA or Unity that have already been developed by Microsoft (or some other party) for the purpose of creating games. C#, the language, has no concept of games, and is not optimized for it necessarily.
Keep in mind that C# is platform dependent. It's designed for windows only, which may or may not be a good thing.
There are some third party applications that allow C# applications to be executed on Linux and OS x machines, but that's not something I would rely on when developing commercial applications.
You can't get into a C++ v C# without having Java mentioned because C# is basically Microsoft's interpretation of Java as they think it should be. Though, C++ is the superset of C but every language after that used C++ as a blueprint and then added where they felt C++ fell short. In short, C++ is similar to almost every recent language because recent languages are loosely based off C++.
Word on the street also says VM-based languages is the answer to everything and if your program uses to much memory, throw more hardware at it instead of fixing your program. Former isn't such a big deal, latter definitely irritates me.
That's not necessarily such a problem. It depends which is cheaper, at least for professional software where such decisions are out of the hands of the programmers (you know, the ones whose job it is to know about memory usage). Right now memory is probably more expensive than code, so it pays to limit your usage, but if memory was cheaper then there'd be no point in saving memory at the expense of longer development time.
Word on the street also says VM-based languages is the answer to everything and if your program uses to much memory, throw more hardware at it instead of fixing your program. Former isn't such a big deal, latter definitely irritates me
You really just made my day with that, especially with
throw more hardware at it instead of fixing your program
I can't count how many times I've heard "It doesn't matter hardware is getting better" Better hardware isn't an excuse to gradually become more and more careless with managing your resources.