Yes, it happens while you type but it does not work reliably. It can only format the current line which is not enough when the semantics change. Here is an example:
// type
if (true) puts("Hi");
//then add
else puts("Hello");
// In my case, a newline is added between else and puts() but the if line is not changed.
// Reformatting the document makes it
if (true)
puts("Hi");
else
puts("Hello");
Stuff like this also happens if I wrap something in a namespace or block. Or when I have a typo causing the IDE to be confused about nesting or whether a name is a variable or a function, formatting can go wild.
Reformatting the whole document is the only way to guarantee stable formatting. Truth is I often have to trigger formatting manually.
I can understand you want to stay out of formatting, clang-format is already a great tool for that. My wish is just to trigger the IDE's formatting on save, basically hitting "Ctrl-K Ctrl-D" automatically on each save.