std::transform(s.begin(), s.end(), std::back_inserter(out), ::toupper);
이 코드를 실행하면 종종 다음과 같은 컴파일 오류가 발생할 수 있다.
no matching function for call to 'transform(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, std::back_insert_iterator, std::allocator > >, )'
원문: http://stackoverflow.com/questions/7131858/stdtransform-and-toupper-no-matching-function
원인은 바로 toupper가 C 표준 라이브러리와 C++ 표준 라이브러리에 동시에 정의되어 있어서 어떤 함수 타입을 overload할지 결정을 못하기 때문이다. 다음과 같은 해결책이 있다고 한다.
std::transform(
s.begin(),
s.end(),
std::back_inserter(out), (int (*)(int))std::toupper // specific overload requested
);
std::transform(
s.begin(),
s.end(),
std::back_inserter(out), ::toupper // global scope
);