Just a detail, but I'm always weary of messing with smart pointer stuff: is there any objection to removing the unused return value from the call to release() at line 208 in AAFSmartPointerBase.h:

if (_rep)
    aafUInt32 refCnt =
       release (_rep);
     _rep = 0;

Leaving this unused return value makes it pretty much impossible to compile any AAF code with -Wall without drowning in spurious warnings.

Or is there something profoundly magic going on here?