refactor: C++0x compatible exception semantics