समस्या
अस्पष्टता समारोह टेम्पलेट द्वारा शुरू की है
template <class charT> charT tolower(charT c, const locale& loc);
मुझे लगता है कि MinGW एक हेडर का अपने कार्यक्रम से परोक्ष रूप से शामिल किया गया है <locale>
इसमें शामिल है, जबकि वीसी ++ नहीं था।
आप एक कलाकारों के साथ tolower
disambiguating करके इसे ठीक कर सकते हैं:
typedef int (*foo)(int);
ptr_fun((foo)tolower);
या अगर आप की तरह रखरखाव प्रोग्रामर आप पर जूते फेंकने के लिए:
ptr_fun((int (*)(int))tolower);
ध्यान दें कि के रूप में आर्मेन कहते हैं, आप डॉन ' टी वास्तव में यहां ptr_fun
की आवश्यकता है। यह एक यूनरी फ़ंक्शन को एक अनुकूलनीय यूनरी फ़ंक्शन में परिवर्तित करता है, लेकिन transform
को इसके पैरामीटर को अनुकूलनीय होने की आवश्यकता नहीं है। अंतर यह है कि इस प्रकार ने argument_type
और result_type
के लिए टाइप किए गए टाइप किए गए हैं। कच्चे फ़ंक्शन प्रकार नहीं हैं, ptr_fun
एक फ़ैक्टर प्रकार देता है जो करता है।
अंत में, यह नहीं सामान्य रूप में सुरक्षित पर एक char
अगर char
अपने मंच पर हस्ताक्षर किया गया है सी tolower
कॉल करने के लिए है। आपका उदाहरण स्ट्रिंग ठीक है, क्योंकि "abc" में पात्रों में से कोई भी नकारात्मक है, लेकिन आप कुछ इस तरह करना चाहिए:
char fixed_tolower(char c) {
return tolower((unsigned char)c);
}
transform(..., fixed_tolower);
या इनलाइनिंग का एक बेहतर मौका के लिए:
struct fixed_tolower : unary_function<char, char> {
char operator()(char c) const {
return tolower((unsigned char)c);
}
};
transform(..., fixed_tolower());
मैं हेवन यह जांच नहीं की गई है कि क्या यह वास्तविक रूप से tolower
के मिंगव कार्यान्वयन के नकारात्मक संदर्भों पर एमएफडब्ल्यू कार्यान्वयन के पीओवी से या तो पीओवी से जीसीसी में कोई फर्क नहीं पड़ता है।
प्रश्न से जुड़े कारणों से, क्यों नहीं ;-) –