What happens, I expect, is that std::log simply delegates to ::log. Unfortunately, ::log only provides a float overload, and you kindly provide a double overload, making yours a better match. But I still don't see how it even gets considered in the overload set.