https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69657
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- This exhibits the same problem: namespace foo { inline double abs(double __x) { return __builtin_fabs(__x); } } using foo::abs; #include <cstdlib> int wrap_abs (int x) { return std::abs (x) + std::abs(x); } This doesn't seem like a libstdc++ issue, firstly because <math.h> is required to define additional overloads, secondly because adding an overload should not affect how calls to ::abs(int) get compiled, and thirdly because the same thing happens with the foo::abs(double) overload above and that's nothing to do with libstdc++. Also, the code above gives the same result for GCC 5 and GCC 6, so all that changed in libstdc++ is that we started defining the overloads in <math.h> that are required by the standard, which for some reason trigger whatever is happening here.