Рассмотрим следующий код:
#include <iostream>
#include <cstring>
#include <cerrno>
int main() {
unsigned long num = strtoul("0xFFFFFFFFFFFF11223344556677889900AABBCCDDEEFF", NULL, 16);
std::cout << std::strerror(errno) << "\n";
unsigned long num2 = std::stoul("0xFFFFFFFFFFFF11223344556677889900AABBCCDDEEFF");
std::stoul("hello world");
return 0;
}
Ожидается, что этот код выведет из Strerror некоторый «Out of range», а затем выдаст исключение out_of_range в соответствии с документацией .Он никогда не должен достигать последней линии stoul.
На практике, это не бросает второе утверждение stoul.Я пробовал GCC 4.8.5 и MinGW 8.2.0, оба не смогли вызвать исключение out_of_range и только поставили invalid_argument в последнем утверждении stoul.
Это ошибка, о которой нужно сообщить, или я что-то упустил иэто ожидаемое поведение?