Sorry for my misunderstanding Jonathan,
Indeed "I don't want to include a header" is not a justification, it is less nowadays if we just "import std;" as a whole.
My point is that something different can be achieved that is not possible with the tuple approach, like assigning an explicit type to each symbol, with auto […] = std::tuple(…) we are limited to use whatever type the compiler deduces which is not always the intention.
The explicitness of for (type_a a = …; type_b b = …; type_c c = …; condition, expression) provides in my opinion more control (I want exactly this type) and sense of intentionality (I wanted this to be like that), I cannot deny that it is not ideal to pollute the for with so much noise though, we can always move variables to the enclosing scope if we don't mind giving them a bigger-than-required scope and lifetime or use the tuple approach which is less noisy but more broad.