Насколько я понял, один из лучших способов проверки условий system_error
переносимым способом — это сравнить их значение code()
со значениями в перечислении std::errc
. Однако, когда я пытаюсь запустить следующий код, это не работает.
#include <cassert>
#include <cerrno>
#include <system_error>
int main() {
try {
throw std::system_error(ENOENT, std::system_category());
} catch (std::system_error const & e) {
assert(e.code() == std::errc::no_such_file_or_directory); // <- FAILS!?
}
}
Я неправильно понимаю, как должны работать эти диагностические ошибки, или я делаю что-то не так? Как сравнивать std::system_error
исключений с std::errc
значениями?
РЕДАКТИРОВАТЬ: код, кажется, работает правильно с использованием clang++
и libc++, но не работает при сборке с libstdc++ независимо от того, какой компилятор GCC или Clang (и версию) я использую. Связаны с PR 60555? Любое портативное обходное решение?