HomePhabricator

Fix implementation of ::abs and std::abs LWG 2192.

Description

Fix implementation of ::abs and std::abs LWG 2192.

Summary:
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.

Reviewers: mclow.lists, ldionne

Reviewed By: ldionne

Subscribers: krytarowski, fedor.sergeev, dexonsmith, jdoerfert, jsji, libcxx-commits

Differential Revision: https://reviews.llvm.org/D60097

Details

Committed
EricWFApr 23 2019, 11:01 AM
Reviewer
ldionne
Differential Revision
D60097: Fix implementation of ::abs and std::abs LWG 2192.
Branches
Unknown
Tags
Unknown