This returns a link to local. It should be
AA movetest() { return AA(); }
This code requires a move or copy mechanism to exist, but MSVC will use return value optimization and not actually name it. In general, you should design your objects as if movements or copies are happening outside your control - just maintain a consistent state of your object, do not rely on their side effects.
VC2010 correctly prefers move to copy, for example, in a debug assembly
AA movetest () {AA a; return a; }
calls the constructor AA (AA &), not AA (AA &) alone.
source share