On page 6, the startOfObject function template has a local class helper, which has a member function template. Member templates are not permitted in local classes. The code should read: namespace helper { template static void* DoDynamicCastToVoid(T*p) { return dynamic_cast(p); } } template void* startOfObject(T*p) { void* result=static_cast(p); if(p) { typeid(result=helper::DoDynamicCastToVoid(p),*p); } return result; }