C/C++ is perfect for me.
I mostly use them as well, but they aren't really ideal for everything, so the question can be raised, what might be?...
not necessarily that such a "one language to rule them all" can actually exist, but it is partly a mystery of what such a thing might look like exactly, like what features would be needed, what sorts of pitfalls would need to be avoided, ...
as well as a lot of "little things", like:
why can't I just type "int[64] arr;" instead of "int[] arr=new int[64];"?... (when the added logic to support "int[64] arr;" is fairly trivial).
then there is things like 'delete', where:
can indicate the end of object lifetime in cases where the compiler and GC may fail to notice it;
but, it can be argued that it is redundant in the case of good static lifetime analysis, and poses a possibility of misuse, ...;
but, OTOH, fully resolving object lifetimes is a difficult problem even with static analysis, basically meaning that pretty much any non-trivial cases end up falling back to the normal garbage collector;
...
in my case, I assume more treating it like a hint, where its exact behavior will depend some on compiler settings. currently the default behavior (in my case) is for the compiler to handle it literally for trusted code and ignore it for untrusted code.
as noted elsewhere, there are a few features which, although potentially nifty, could probably be left out of such a language for sake of "compiler writer sanity", or at least restricted in a few ways, such as requiring the variable scope to be "lexically visible" (basically, where the location of any accessible variable can be determined simply from the lexical context of where the variable reference occurs, *1).
*1: static languages tend to require this as a basic assumption, as do most script languages as well, but not all ways of handling variable scope assume this. decided to refrain from going into too much detail over this one. but, the basic assumption here is that by walking "outward" and jumping through any relevant import/using/... statements, it is possible to reach any variable which may be referenced from a given source location. the contrast is scoping models where the current execution state and/or control flow are what determine which variable bindings are visible and the path needed to reach them. (basically, it then typically either turns into using runtime variable lookups, or trying to handle it with static analysis).