http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59048
--- Comment #4 from Paolo Carlini <paolo.carlini at oracle dot com> --- Indeed, I had a look to f and the correct operator== and compare are called, no temporaries. By the way, type_traits<char> uses memcmp not strcmp.