I am running g++(gcc version 3.4.4) on cygwin.
I can't get this small snippet of code to compile. I included the appropriate headers.
int main(){
std::string temp("asgfsgfafgwwffw");
std::transform(temp.begin(),
temp.end(),
temp.begin(),
std::toupper);
std::cout << "result:" << temp << std::endl;
return 0;
}
I have not had any issues using STL containers such as vector.
Does anyone have any suggestions or insights into this situation.
Thanks.
This explains it quite well.
Which will boil down to this code:
std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));
From the link above.
#include <cctype> // for toupper
#include <string>
#include <algorithm>
using namespace std;
void main()
{
string s="hello";
transform(s.begin(), s.end(), s.begin(), toupper);
}
Alas, the program above will not
compile because the name 'toupper' is
ambiguous. It can refer either to:
int std::toupper(int); // from <cctype>
or
template <class chart>
charT std::toupper(charT, const locale&);// from
<locale>
Use an explicit cast to resolve the
ambiguity:
std::transform(s.begin(), s.end(), s.begin(),
(int(*)(int)) toupper);
This will instruct the compiler to
choose the right toupper().