> But it actually happened that co-workers used these private methods because they use code-completion instead of reading the header...
A nice feature I've noticed in Elixir is that giving a function a "@doc false" annotation will actually prevent IDE/REPL autocomplete from completing the function. (It's still there to call if you type it yourself.) Maybe that's something C++ tooling could copy.
I usually avoid 'friend' in these situations and just write
before the method declaration. But it actually happened that co-workers used these private methods because they use code-completion instead of reading the header...But I might would call the class Friend<T> or something.