C/C++ for-loops are overpowered for most uses
What the hell?
It's a heavily overloaded statement used for a bunch of related but different purposes - creating number sequences, iterating over arrays, iterating using arbitrary iterators, infinite loops, while loops, do-while loops, etc. It contains 3 separate expressions, each of which can (and often is) used in weird ways to get subtly different iterating behaviour, leading to code that is harder to read.
If you want to iterate over a container, a "for element in container" style loop makes more sense. The language should be able to extract the start and end position accordingly. Vectors and arrays can be included in this.
If you have some sort of iterator, then arguably a while loop fits that semantic better. C++ wedges them into the for-statement via the help of hacks like the magical default-constructed input iterator that marks an end of a sequence. It's not a natural fit.
If you want to create a number sequence, that can be a separate operation. e.g. a Range() function. Then, iterating over it is optional - which is good, because that's often suboptimal anyway, in these days of vectorisation and parallelism you don't really want explicit loops everywhere.
If you want an infinite loop then that's what 'while' is there for - not "for (;;)". Same goes for any other loop that would be a [do]-while in other languages - those constructs exist because they're clearer, semantically.
What is the correlation, in this case, between versatility/utility and being over-powered?
TBH I think I understand what you may have had in mind with your original statement. It's just that I find the wording fantastically misleading and your explanation actually further deviates from what I thought you meant. If anything, your elaboration works directly against it, hilighting how a for-loop is too specific/ill-suited for most cases, making it, effectively, underpowered. I personally find it simple and slick, and prefer it whenever possible.
Just to express what I had in mind with my reply: a for-loop is a flow control construct. It has nothing to do with power. Whether it is well or poorly suited for a task stems from the choice made by the programmer, not the construct itself. Misusing flow control is a different topic.
PS: while(1) { } generates a C4127 in VS, which needs to either be explicitly suppressed or replaced with a for(;;) { }.
That being said I digress - this discussion is only remotely related to the topic at hand.