std::for_each イテレーターにアクセスできるので、ラムダを使用して std::list から現在の要素を消去できます (以下のように)
typedef std::shared_ptr<IEvent> EventPtr;
std::list<EventPtr> EventQueue;
EventType evt;
...
std::for_each(
EventQueue.begin(), EventQueue.end(),
[&]( EventPtr pEvent )
{
if( pEvent->EventType() == evt.EventType() )
EventQueue.erase( ???Iterator??? );
}
);
[](typename T::value_type x){ delete x; の使用について読みました。ここでは SO ですが、VS2010 ではこのステートメントが気に入らないようです (エラー ソースとして T に下線が引かれています)。