2014-09-16 5 views
23

जीसीसी 4.9 निम्नलिखित कोड की अनुमति देता है, लेकिन जीसीसी 4.8 और क्लैंग 3.5.0 इसे अस्वीकार कर देता है।एक नियमित कार्य में एक पैरामीटर के रूप में ऑटो एक जीसीसी 4.9 एक्सटेंशन है?

void foo(auto c) 
{ 
    std::cout << c.c_str(); 
} 

मैं 4.9 में warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic] मिलता है लेकिन 4.8 और बजना में मैं error: parameter declared 'auto' मिलता है।

+1

जीसीसी 4.9.1 के साथ, 'g ++ -std = C++ 11' मुझे "चेतावनी देता है: पैरामीटर घोषणा में' ऑटो 'का उपयोग केवल -std = C++ 1y या -std = gnu ++ 1y के साथ उपलब्ध है "। 'G ++ -std = C++ 14' के साथ कोई चेतावनी नहीं है। –

+5

@ किथ थॉम्पसन, अजीब, यह निश्चित रूप से सी ++ 14 का हिस्सा नहीं है (लैम्बडास, हां, लेकिन अन्य कार्यों में नहीं)। – chris

+0

@ क्रिस: जीसीसी 4.9.1 के साथ खेलना, [यहां एक उदाहरण है] (http://codepad.org/mm1jRI4X)। Codepad.org द्वारा उपयोग किया गया कंपाइलर इसे संभाल नहीं करता है, लेकिन मुझे आउटपुट की 4 लाइनें अपेक्षित आकार और प्रत्येक पंक्ति पर मूल्य के साथ मिलती हैं। स्पष्ट रूप से 'foo' टेम्पलेट की तरह कार्य करता है। –

उत्तर

16

हां, यह एक विस्तार है। मुझे लगता है कि 'अवधारणाओं' प्रस्ताव के हिस्से के रूप में सी ++ 17 में जोड़ा जाने की संभावना है।

+9

'मुझे' अवधारणाओं 'प्रस्ताव के हिस्से के रूप में सी ++ 17 में जोड़ा जाने की संभावना है, मुझे विश्वास है। वास्तव में, [सामान्य कार्यों] के रूप में जाना जाता है (http://www.open-std.org/jtc1/sc22/ wg21/दस्तावेज़/कागजात/2014/n4040.pdf) ([dcl.fct])। – user657267

+1

@ user657267 [अवधारणा तकनीकी विशिष्टता] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4333.pdf) में इसके लिए उपयोग की जाने वाली शब्द "संक्षिप्त फ़ंक्शन" प्रतीत होती है टेम्पलेट्स "। –

+1

@ जोनाथन मुझे जानना अच्छा लगता है, मुझे लगता है कि "जेनेरिक फ़ंक्शन" भी था ... जेनेरिक। – user657267

11

यह अवधारणाओं लाइट है के लिए

template<class T> 
void foo(T c) 
{ 
    std::cout << c.c_str(); 
} 

auto बात सिर्फ अधिक वर्बोज़ template<class T> बदल देता है। इसी तरह, आप के लिए

template<class T> 
requires Sortable<T>{} 
void foo(T c) 

यहाँ

void foo(Sortable c) 
एक आशुलिपि के रूप में

लिख सकते हैं, Sortable एक अवधारणा है, जो constexpr विधेय कि टेम्पलेट पैरामीटर पर आवश्यकताओं को औपचारिक रूप से एक संयोजन के रूप के रूप में लागू किया जाता है। इन आवश्यकताओं की जांच नाम लुकअप के दौरान की जाती है।

इस अर्थ में, auto एक पूरी तरह से अनियंत्रित टेम्पलेट है।

संबंधित मुद्दे

 संबंधित मुद्दे