template< typename T > bool move_next( T & var, IEnumerator * pEnum ) { if ( ! pEnum->MoveNext() ) return false; var = __try_cast<T>( pEnum->Current ); return true; }