Listing 2: First crack at FOR_EACH.

#define FOR_EACH( type, var, coll ) \
    if( IEnumerator *_num_ = (coll)->GetEnumerator() ) \
        for ( type var; /* magic happens here */; )