The rule in C++ is that #include <cmath> puts the declaration of abs in the namespace std and is allowed to also put the declaration of abs in the global namespace.
Another rule in C++ is that #include <math.h> puts the declaration of abs int he global namespace and is allowed to also put the declaration of abs in the namespace std.
So, no, you can't assume that #include <cmath> won't put abs into the global namespace.
The reason for this rule instead of the "obvious" one that #include <cmath> puts names only in std is that the latter rule can be nasty to implement if the C++ implementors don't also have control over the C headers. In that case, the C++ headers would have to have duplicate declarations for all of the C functions, and any change to the C headers would have to be carried through into the C++ headers, which produces a logistical nightmare.
absetc) which is whystdis not required, butstd::absdoes exist so you can still qualify it