मेरी विनम्र राय में साथ इस won't compile और आधारित Concepts TS§5.1.4/सी 4 पर आवश्यक है भाव [expr.prim.req] (जोर मेरा):
एक आवश्यकता है अभिव्यक्ति केवल एक अवधारणा defin के भीतर प्रदर्शित करेगा आयन (7.1.7), या टेम्पलेट-घोषणा (खंड 14) या फ़ंक्शन घोषणा (8.3.5) की आवश्यकता-खंड के भीतर।
उपर्युक्त उद्धरण विशेष रूप से संदर्भों जहां एक requires
खंड दिखाई दे सकता है और lambdas उनमें से एक नहीं है तय।
Concequently,
[](auto x) requires C1<decltype(x)> && C2<decltype(x)> {
// ...
}
मान्य नहीं है।
template<typename T> concept bool C = true;
auto gl = [](C& a, C* b) { a = *b; }; // OK: denotes a generic lambda
तो मुझे लगता है कि, आप निम्नलिखित तरीके से पूरा कर सकते हैं कि आप क्या चाहते:
हालांकि, §5.1.2 लैम्ब्डा भाव में [expr.prim.lambda] वहाँ निम्नलिखित उदाहरण है
template <class T> concept bool C1 = true;
template <class T> concept bool C2 = true;
template <class T> concept bool C3 = C1<T> && C2<T>; // Define a concept that combines
// `C1` and `C2` requirements.
int main() {
auto f = [](C3 x) { /* Do what ever */ }; // OK generic lambda that requires input
// argument satisfy `C1` and `C2`
}
Live Demo
क्यों आप सिर्फ एक सामान्य functor नहीं लिखते? – inf
अवधारणाएं टीएस लैम्बडास के लिए व्याकरण को संशोधित नहीं करती है, इसलिए मुझे लगता है कि लैम्ब्डा के लिए एक आवश्यकता-खंड को जोड़ना संभव नहीं है। * सरल-प्रकार-विनिर्देशक * की परिभाषा को बदलकर, यह बाधाओं के रूप में बाध्य-प्रकार-विनिर्देशकों का उपयोग करने की अनुमति देता है। – dyp