जब बुला std::sort()
एक पर std::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
जीसीसी और क्लैंग दोनों एक त्रुटि को इस तरह से लौटाते std::array
हैं - क्लैंग कहते हैं
त्रुटि: अघोषित पहचानकर्ता 'सॉर्ट' का उपयोग; क्या आपका मतलब था 'एसटीडी :: सॉर्ट'?
std::sort(begin(foo2), end(foo2))
समस्या को ठीक करने के लिए बदल रहा है।
MSVC उपरोक्त कोड को लिखित रूप में संकलित करता है।
क्यों के बीच इलाज में अंतर std::vector
और std::array
; और कौन सा संकलक सही है?
std::sort
जो तर्क-निर्भर लुकअप की ओर जाता है (जैसे आपके पास पहले से है std::begin
और std::end
)?
namespace std
, जहां एक साधारण सूचक प्रकार काम करता है। मेरा मानना है कि यह ओवररन और अन्य सामान्य त्रुटियों का पता लगाने के लिए डिबग-बिल्ड चेक सम्मिलित करना है।
sort(...
->std::sort(...
। मुझे लगता है कि ADL (तर्क पर निर्भर लुकअप) है जो आपको ट्रिप कर रहा है। वह, या कटौती गाइड। किसी भी स्थिति में; आपके द्वारा कॉल किए जाने वाले कार्यों को हमेशा योग्य बनाएं।