Это может быть ошибка в вашей установленной версии компилятора.Вот что GCC делает для вашего кода в моей системе (Linux x86-64):
$ g++-4.1.2 test.cpp -o test
$ ./test
exception: array::_M_at
$ g++-4.3.5 test.cpp -o test
$ ./test
exception: array::at
$ g++-4.4.4 test.cpp -o test
$ ./test
exception: array::at
$ g++-4.5.0 test.cpp -o test
$ ./test
exception: array::at
Так что, похоже, это работает по всем направлениям, и, в частности, говорит о том, что он работает правильно на моей машине с GCC4.1.2 где это не получается с твоим.Вы пытались получить трассировку стека в момент сбоя?Valgrind также может быть полезным.