enum exceptions now extend std::invalid_argument instead of std::exception