एक सबस्क्रिप्ट ऑपरेटर में लैम्ब्डा होने से g ++ और clang के लिए काम नहीं कर रहा है।लम्बाडा सबस्क्रिप्ट इटरेटर
क्या यह एक कार्यान्वयन त्रुटि या सी ++ मानक में "दुखी" नियम है?
उदाहरण:
class A
{
public:
template<typename T> void operator[](T) {}
template<typename T> void operator()(T) {}
};
int main()
{
A a;
a[ [](){} ]; // did not compiler: see error message
a([](){}); // works as expected
}
त्रुटि:
main.cpp:13:6: error: two consecutive '[' shall only introduce an attribute before '[' token
a[ [](){} ];
^
main.cpp:13:15: error: expected primary-expression before ']' token
a[ [](){} ];
मैं जानता हूँ कि जिम्मेदार बताते हैं कि "[[" लेकिन मुझे लगता है कि "[[" (साथ एक या अधिक सफेद रिक्त स्थान) सोच रहा हूँ भी साथ शुरू होता है काम करता है:
void func(int x [ [gnu::unused] ]) {} // compiles fine! :-(
और अतिरिक्त सफेद जगहों के साथ या बिना "निरंतर" अर्थ है? – Klaus
@ क्लोस सी ++ व्हाइटस्पेस संवेदनशील नहीं है। '>> 'उसमें एक अपवाद था जिसे टोकन माना जाता था, लेकिन कोई' [[' टोकन नहीं है। – Barry
कल मैंने सीखा कि 'टेम्पलेट <> डबल बी :: var = 1.123; 'अमान्य है, लेकिन' टेम्पलेट <> डबल बी :: var = 1.123; 'काम करता है। केवल एक सफेद जगह ... :-) –
Klaus