We use polymorphic exception objects, so catching by value invokes the copy constructor and stuff that we don't really want.