A while age a colleague told me he spent lot of time debugging a race condition. The culprit turned out to be something like this:
void foo() { ScopedLoc
If you're going to define a macro, I'd probably rather define this one:
#define GET_SCOPED_LOCK(name, mtx) ScopedLock name(mtx)
and stop creating objects other than via the macro.
Then rename ScopedLock to ThisClassNameShouldNotAppearInUserCode if that helps.
ScopedLock
ThisClassNameShouldNotAppearInUserCode