All overloads of ::abs and std::abs must be present in both <cmath> and <cstdlib>. This is problematic to implement because C defines fabs in math.h and labs in stdlib.h. This introduces a circular dependency between the two headers.
This patch implements that requirement by moving abs into math.h and making stdlib.h include math.h. In order to get the underlying C declarations from the "real" stdlib.h inside our math.h we need some trickery. Specifically we need to make stdlib.h include next itself.
Suggestions for a cleaner implementation are welcome.
We were not using the builtin before -- why the change?