I haven't tried this myself yet, but clang_indexer seems very close to what you are looking for (sources). It still uses an external database (i.e. doesn't index on the fly per se), but it seems to offer functionality one usually only finds in cscope (which doesn't support C++ too well).
For autocomplete I use clang_complete. It doesn't require generating an index and works most of the time pretty well. It also can do automatic syntax checking in vim so one is warned of possible issues. It doesn't autocomplete the macro example you gave
#define blah(x) blah__ ## x
void blah_
as bla__x though (only as blah(x)). It would be nice for this to be more configurable, but I wouldn't consider this broken either.