std::is_error_code_enum
को इस प्रकार वर्णित किया गया है:
यदि T एक त्रुटि कोड गणना है, तो यह टेम्पलेट सदस्य को स्थिर मान समान सत्य प्रदान करता है।
std::errc
को इस प्रकार वर्णित किया गया है:
स्कोप्ड एन्यूमरेशन std::errc पोर्टेबल एरर कंडीशन के मानों को परिभाषित करता है
निश्चित रूप से, std::is_error_code_enum<std::errc>::value
true
होना चाहिए? फिर भी मेरे लिए यह झूठा है। क्या यह जानबूझकर है?
यह मायने रखता है, क्योंकि इसके बिना, std::errc
से std::error_code
में निहित रूपांतरण मौजूद नहीं है।
3 जवाब
std::errc
त्रुटि शर्तों का एक समूह है। इसका मत
std::is_error_condition_enum<T>::value;
true
होगा। चूंकि यह त्रुटि कोड की गणना नहीं है
std::is_error_code_enum<T>::value;
होना चाहिए, और है, false
।
is_error_code_enum और is_error_condition_enum को प्रोग्राम-परिभाषित प्रकारों के लिए विशेषीकृत किया जा सकता है ताकि यह इंगित किया जा सके कि ऐसे प्रकार क्रमशः वर्ग error_code और वर्ग error_condition स्वचालित रूपांतरण के लिए पात्र हैं।
Is_error_condition_enum<>::value मान true
std::errc
के लिए है:
template<> struct is_error_condition_enum<errc> : true_type {};
std::error_code
कंस्ट्रक्टर और असाइनमेंट ऑपरेटर को std::errc
से सक्षम करने के लिए हमें स्पष्ट रूप से यह कहना होगा कि std::is_error_code_enum<std::errc>
को सही लौटना चाहिए। अन्यथा कंस्ट्रक्टर और असाइनमेंट ऑपरेटर अक्षम हो जाएगा।
#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;
}
अधिक विवरण system_error शीर्षलेख
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।
std::errc
एक त्रुटि स्थिति है लेकिनstd::io_errc
एक त्रुटि कोड हैstd::error_code
के तीसरे कंस्ट्रक्टर का विवरण लें: "एरर कोड एनम ई से एरर कोड बनाता है।*this = make_error_code(e)
के बराबर। ओवरलोड ओवरलोड रिज़ॉल्यूशन में तभी भाग लेता है जबstd::is_error_code_enum<ErrorCodeEnum>::value == true
।" इसका अर्थ यह है किstd::is_error_code_enum<T>::value == true
make_error_code(T)
, और एकstd::make_error_code(std::errc)
है।