I think you've hit the nail on the head, Uniwares.
Here is a sample file I tried it with. Apologies for pasting 30 lines -- I couldn't be bothered to find the shortest possible example.
In the following file, going to DoSomeStuff() using the context bar goes to the correct place: going to DoOtherStuff() ends you up five lines too high.
#include "a.h"
#include "b.h"
#include <cstdio>
class CMyClass
{
public:
CMyClass();
~CMyClass();
void DoSomeStuff();
void DoOtherStuff();
};
void CMyClass::DoSomeStuff()
{
#if 0
for (int i = 0; i < 17; ++i)
{
PutYourLeftLegIn();
PutYourLeftLegOut();
}
#endif
DoOtherStuff();
}
void CMyClass::DoOtherStuff()
{
FILE *f = fopen("output.txt", "w");
fprintf(f, "Doing other stuff");
fclose();
}