मैं डिफॉल्ट बराबर ऑपरेटर bool operator ==(...) = default; का उपयोग करना चाहता था यदि केवल कंपाइलर इसका समर्थन करता है, अन्यथा मैं अभी भी मौजूदा कार्यान्वयन का उपयोग कर सकता हूं।

लेकिन मुझे https://en.cppreference.com/w/cpp में उपयुक्त फीचर टेस्ट नहीं मिल रहा है। /feature_test

मुझे सही सुविधा परीक्षण इंगित करें या इस कोड को ठीक करने में सहायता करें:


struct Some {
  constexpr bool operator == (const Some& rhs) const noexcept 
#if __cpp_what?
   = default;
#else
   {
      ...
   }
#endif
};
3
PiotrNycz 29 जिंदा 2021, 14:44

2 जवाब

सबसे बढ़िया उत्तर

डिफ़ॉल्ट तुलना के रूप में कसकर जुड़ा हुआ है

  • P1186R3: आप वास्तव में कब <=> का उपयोग करें?

आप डिफ़ॉल्ट तुलना के सबसेट मामले के लिए भी __cpp_impl_three_way_comparison सुविधा परीक्षण का उपयोग करने में सक्षम हो सकते हैं। यह भी देखें P1185R2 (<=> != ==)।

3
dfrib 29 जिंदा 2021, 15:43

आप जिस दस्तावेज़ की तलाश कर रहे हैं वह SD-FeatureTest है। यह सभी प्रस्तावों और सभी मैक्रो मूल्यों के सभी इतिहास में शामिल है।

डिफ़ॉल्ट तुलना इस अर्थ में थोड़ी अनूठी है, जबकि यह एक भाषा विशेषता है, इसके लिए एक मजबूत पुस्तकालय घटक भी है: <=> का उपयोग करने के लिए, आपको #include <compare> की आवश्यकता है और तुलना का उपयोग करें उस शीर्षलेख में परिभाषित प्रकार। जैसे, यहाँ दो मैक्रोज़ हैं:

  • __cpp_impl_three_way_comparison
  • __cpp_lib_three_way_comparison

भाषा मैक्रो वास्तव में मानक पुस्तकालय के लिए पुस्तकालय सुविधा प्रदान करने के लिए अभिप्रेत है, जब संकलक इसका समर्थन कर सकता है।

लाइब्रेरी मैक्रो वह है जो उपयोगकर्ता (यानी, आप) के उपयोग के लिए अभिप्रेत है।

1
Barry 29 जिंदा 2021, 17:31