http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54388
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-08-28 13:55:36 UTC --- The paper does have implementation experience, and experience shows we got it wrong ;) We could do: return __n < _Nm ? _M_instance[__n] : (std::__throw out_of_range(__N("array::at")), _M_instance[0]); and still get rid of the code that's conditionally compiled on __EXCEPTIONS. N.B. the second branch uses _M_instance[0] to avoid possible warnings about out-of-bounds accesses.