You can do auto-indent in Java, PHP, Perl... but not in C/C++, where you're free to embed curly braces etc. in macros, and it's really common to do so.
To make matters worse, you actually need to compile the program in order to determine which macro gets expanded into what amount of braces...
Vim auto-indents macro blocks just fine, and preprocessing isn't compilation. For your edification, clang-format is amazing: https://youtu.be/JSjoCisIHcM?t=1764
Ah now I see. Although I understand that there are some tools that do this, it is not a trivial process like in many other languages. Thanks for enlightening me.
To make matters worse, you actually need to compile the program in order to determine which macro gets expanded into what amount of braces...