हां। [Temp.constr.expr], N4641 के रूप में शब्दों से:
एक अभिव्यक्ति बाधा की कोई समस्या है कि टेम्पलेट तर्कों के प्रतिस्थापन के माध्यम से एक अभिव्यक्तिE
के गठन पर एक आवश्यकता को निर्दिष्ट करता है। E
उपज में प्रतिस्थापन विफल नहीं होने पर एक अभिव्यक्ति बाधा संतुष्ट होती है। एक अभिव्यक्ति बाधा के भीतर, E
एक अनियमित ऑपरेंड (क्लॉज 5) है।
तो declval
का उपयोग करना ठीक होना चाहिए।
वैकल्पिक रूप से, तुम सिर्फ प्रकार आप आवश्यकताओं के संदर्भ में के बाद से जरूरत की वस्तुओं बना सकते हैं, हम वास्तव में कुछ भी निर्माण नहीं कर रहे हैं:
template<typename T>
concept bool SomeConcept = requires(T a, int i) {
{ a.someFunction(std::move(i)) } -> int;
};
धन्यवाद बैरी! वैसे, क्या अधिक पठनीय वाक्यविन्यास के बजाय चर प्राप्त करने के लिए कोई अन्य लाभ है? क्या यह सिर्फ बेहतर अभ्यास है या कुछ नुकसान हैं जिनके बारे में मुझे अवगत होना चाहिए? –
@ गुइलाउमरासिकोट शायद बेहतर अभ्यास के बारे में बात करने के लिए थोड़ा जल्दी। व्यक्तिगत रूप से, मैं जहां संभव हो वहां सभी पूर्व-अवधारणाओं मेटाप्रोग्रामिंग हैक्स से बचना चाहता हूं। – Barry