Spec-Zone.ru › C++

std::error_condition

Определён в заголовочном файле <system_error>
class error_condition;
(начиная с C++11)

std::error_condition хранит независимое от платформы значение, идентифицирующее условие ошибки. Как и std::error_code, оно однозначно определяется целочисленным значением и std::error_category, но, в отличие от std::error_code, это значение не зависит от платформы.

Типичная реализация содержит один целочисленный член данных (значение) и указатель на std::error_category.

Функции-члены

(конструктор)
создаёт error_condition
(открытая функция-член)
operator=
заменяет содержимое
(открытая функция-член)
assign
заменяет содержимое
(открытая функция-член)
clear
устанавливает значение error_condition равным 0 в generic_category
(открытая функция-член)
value
получает значение error_condition
(открытая функция-член)
category
получает error_category для этого error_condition
(открытая функция-член)
message
получает поясняющую строку
(открытая функция-член)
operator bool
проверяет, не равно ли значение нулю
(открытая функция-член)

Функции, не являющиеся членами

operator==operator!=operator<operator<=>
(удалён в C++20)(удалён в C++20)(C++20)
сравнивает error_condition и error_code
(функция)

Вспомогательные классы

is_error_condition_enum
(C++11)
определяет перечисление как std::error_condition
(шаблон класса)
std::hash<std::error_condition>
(C++17)
поддержка хеширования для std::error_condition
(специализация шаблона класса)

Примечания

Сравнение между std::error_code и std::error_condition определяется их категориями ошибок. Примечательно, что условие ошибки типа std::generic_category может сравниваться как равное коду ошибки определённой категории (например, std::system_category), если они обозначают ошибку одного и того же вида.

Значение std::errc можно сравнить с кодом ошибки посредством неявного преобразования в std::error_condition.

#include <cerrno>
#include <iostream>
#include <system_error>
#include <Windows.h>

int main()
{
    std::error_code ec{ERROR_FILE_EXISTS, std::system_category()};
    std::error_condition econd{EEXIST, std::generic_category()};

    std::cout.setf(std::ios::boolalpha);
    std::cout << (ec == econd) << '\n'; // typically true
    std::cout << (ec == std::errc::file_exists) << '\n'; // ditto
    std::cout << (ec == make_error_code(std::errc::file_exists)) << '\n'; // false:
                                                                     // different category
}

Возможный вывод:

true
true
false

См. также

error_code
(C++11)
хранит зависящий от платформы код ошибки
(класс)
error_category
(C++11)
базовый класс для категорий ошибок
(класс)
make_error_condition(std::errc)
(C++11)
создаёт условие ошибки для значения errc типа e
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/error_condition

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API