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.