I really like how default elisp tab completion works.
if you set `(setq tab-always-indent 'complete)`, pressing tab in elisp buffer first correctly indents, and then if indented it "tries to complete the thing at point" basically autocompletes, by calling `completion-at-point`. i have eglot and clang installed, and i expect the same behavior in c++ buffer, but pressing tab, only calls `c-indent-line-or-region`. doing M-x `completion-at-point` or C-M-i works, but its far less convenient that just using tab key. I'm aware that there are other packages that do implement compilation for you, but i try to use built in stuff as much as possible.