If you want Cairo, you can always download it and link to it, what's the matter with that. Let's say I want MP3 support, is that going into the next standard too? Support for computer vision would be nice, don't you think?
I'd prefer if they'd put more work into the actual language, and I'm not talking about WTF updates like the one that is to come in C++14 about separators in literals which makes it legal to write literals like 1''2'345'67''''8'9. Really? Couldn't they think of something even less useful?
I'm not saying that C++11 (or C++14) is really bad. It's a good-willed attempt, but there remain a lot of things that I wish were a bit more "round" or "polished".
type_info had a hash_code function added in C++11. Finally, something really useful about RTTI, making serialization a lot easier. Except... except it's not really useful for anyting (anything including serialization, it's only useful as key in a hash table). The hash isn't a compiletime-constant, not even for builtin types. You have to wonder, do you expect the type of, say, int to change during runtime? But worse, the standard explicitly allows for different invocations of the same program to return different results (WTF?). Same input, different output. Seriously?
Would it really be asked too much to require that different invocations of the same program return at least the same value?
enums could be more intelligent. You still can't figure how many enumeration values are in one enum or what their names and values are, for example. How nice would it be to bind constants to an embedded script language if you could write something like: for(auto i = 0; i < that_enum.size(); ++i) context.bind(that_enum.name(), that_enum.value()); Or, why not for(auto e : that_enum) { ... }.
Sure, this is somewhat grossly different from what present C++ looks like, but what is the hindrance? C++11 looks grossly different from C++03 too. An enumeration isn't an array, nor is it a class with member functions, OK... but so what? Actually why can't a complete enum behave like an array with accessors to names and values? None of the necessary information is something that the compiler does not already know or that the compiler couldn't trivially replace with a compiletime-constant.
Also, the strongly typed enums in C++11 are more annoying than helpful most of the time. It's nice that identical names don't collide now. But in many (most? all?) cases, you only want exactly one enum in one place (be it inside a scope or in a function call), and it is a nuisance having to type a fully qualified name, expecially if you give your enumerations expressive names that are longer than 3 letters. I concede that it is non-trivial for a compiler to magically figure out just what you want, but it's something you might be able to hint nevertheless, maybe with an attribute, or with a keyword ("explicit" or "using" sounds good).
If you declare, say, a function like open_file(string name, open_mode_t mode), then you declared that you expect a constant of type open_mode_t, you do not care whether the enumerator read in open_mode_t collides with the enumerator read in memory_protection_t or with any other enumeration. Actually, even if you don't tell anything special about it, this is pretty clear. You've said what type you expect. Even if the compiler has several ambiguous possibilities in its books (and, unlikely as it may be, several function overloads taking different enums), only exactly one is applicable due to the requested type. Yet, in reality, you still need to type open_mode_t::read, simply because the language works that way. You can't do something like using enum open_mode_t; inside the function's body either (works fine for namespace, why is it not allowed for enum?).
If my hypothetical function open_file does not cut it, look at APIs like OpenGL where you still use macros for constants because there is no way of doing it properly with enums (even though the spec file would in the mean time easily allow for it!). That's of course because there's no way to declare two non-strong enums that both have GL_ONE or GL_SOURCE (or the like) in them.
There should be a way of telling that you want exactly one particular type of enum in a particular location, so the superfluous resolution is not needed. Maybe a declaration similar to void foo(using blah blubb); to denote to the compiler: Here, please do as if I wrote blah:: in front of everything I provide as input to blubb, because that's the only type/strong enum/namespace I care about here. Whatever the actual syntax may be... but there should be some way of not requiring you to type redundant stuff that is, at least to the human, obvious.
Similarly to strong enums, constexpr was a good intent, but often turns out counterproductive rather than useful because the standard imposes ridiculous limitations which force you to write inefficient recursive implementations (though C++14 will address this!) and compilers are not required to evaluate something that is constexpr and constant in every respect at compiletime. The compiler isn't even required to remember the compiletime constant for a second time after you have forced compiletime-evaluation by assigning to an enumeration before (and e.g. GCC demonstrably doesn't do that!).
C++14 will bring template variables (seriously, who needs that... but alright, it doesn't hurt) --- but templates can still only take a typename or an integer (or bool). They can't take much else, in particular not a float constant (yes I am aware of rounding/precision issues, but so what), nor a character string literal, nor a particular typename. Why not? Why does a typename have to be every typename?
If you write a class like, say, std::lock_guard, which expects a particular type with a particular behavior (in this case something it can lock/unlock), you declare it as template<typename Mutex>. If a user supplies a type that doesn't have the necessary functions, there will be a compiler error because of missing functions.
But, would it be asked too much if you were allowed to write <lockable Mutex> instead of <typename Mutex> and have the compiler treat this in a way similar to forward-declaring lockable (or whatever it takes for the compiler to "remember" what you ask for), and to static_assert upon instantiation that whatever type the user supplies is what you mandated? Preferrably with a human-intellegible error message which isn't something like "missing function", but something like "bad template parameter given".
C++11 has thread and mutex support and flipping condition variables, but no semaphores. There's an atomics library, but no simple atomic containers like a queue or a list (not an issue for me, personally, but seriously... why not? This is what 99.9% of people get wrong 99.9% of the time, if there is one thing that would be truly useful for a standard library, it's something that is hard / error prone to implement).
Static locals are initialized thread-safe thanks to C++ knowing about threads. Fine, that's on the safe side. But what if you don't want that? What becomes of "pay for what you use" when you use a static local and do not share it among threads?
All in all, lots of good ideas, but still a lot to polish before another half gigabyte of library is being added.