如果T是错误代码枚举,则此模板将提供等于true的成员常量值。
std::errc
被描述为:
作用域枚举std :: errc定义了可移植错误条件的值
那么,std::is_error_code_enum<std::errc>::value
应该是true
吗?但是对我来说,这是错误的。这是故意的吗?
这很重要,因为没有它,从std::errc
到std::error_code
的隐式转换就不存在。
答案 0 :(得分:1)
is_error_code_枚举和is_error_condition_枚举可能是 专门用于程序定义的类型,以指示此类类型是 符合class error_code和class error_condition自动的条件 转化。
is_error_condition_enum <> :: true
的值是std::errc
:
template<> struct is_error_condition_enum<errc> : true_type {};
答案 1 :(得分:1)
std::errc
是错误 conditions 的枚举。那是
std::is_error_condition_enum<T>::value;
将为true
。由于它不是错误的枚举,所以 codes
std::is_error_code_enum<T>::value;
应该是false
。
答案 2 :(得分:-1)
为了从 std::error_code
启用 std::errc
构造函数和赋值运算符,我们需要明确说明 std::is_error_code_enum<std::errc>
应该返回 true。否则构造函数和赋值运算符将被禁用。
#include <iostream>
#include <system_error>
// Enable error_code(errc) and error_code = errc
template <> struct std::is_error_code_enum<std::errc>
: std::true_type {};
int main() {
std::error_code inv_arg1(std::errc::invalid_argument);
std::error_code inv_arg2;
inv_arg2 = std::errc::invalid_argument;
std::cout << inv_arg1 << std::endl;
std::cout << inv_arg2 << std::endl;
return 0;
}