enum class value initialization
От: B0FEE664  
Дата: 26.02.22 12:53
Оценка: 2 (1)
Решил я сегодня первый раз воспользоваться функцией std::from_chars и не понял как правильно проверять результат вызова.
Дело в том, что в случае успеха "ec is value-initialized", где ec это поле from_chars_result:
struct from_chars_result {
    const char* ptr;
    std::errc ec;
};

При этом std::errc определяется в стандарте как
enum class errc {
address_family_not_supported, // EAFNOSUPPORT
....

При этом в MS компиляторе определение такое:
    // ENUM CLASS errc
enum class errc
    {    // names for generic error codes
    address_family_not_supported = 102, // EAFNOSUPPORT
...


Если я правильно понимаю, "ec is value-initialized" означает инициализацию вида errc{}.
Внимание вопрос: какое значение будет у ec в случае успешного выполнения?
Я вижу возможные варианты:
1) unspecified
2) undefined behavior
3) 0
4) errc::address_family_not_supported

Так как у errc не указан underlying type, то если я правильно помню, присваивание любого значения лежащего вне перечисленных — это undefined behavior. Это так? Если так, то либо у address_family_not_supported == 0, либо errc{} != 0.

Короче: с чем, согласно стандарту, следует сравнивать значение std::errc{} ?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.