While porting a program from Visual Studio to GCC, I bumped in a discrepancy in behavior related to global namespace abs function (not std::abs), which after code minimization can be shown in the following example:
#include <iostream>
int main() {
    std::cout << abs( -0.5 );
}
Here Visual Studio prints 0.5, but GCC just 0. It seems that only integer valued abs function is present in global namespace of GCC's libstdc++. Clang with libc++ behaves like Visual Studio printing 0.5. Online demo: https://gcc.godbolt.org/z/EWbW5sf7c
Do MSVC and Clang extend the standard defining more functions in the global namespace than required?
P.S. I can find some old related questions, e.g. Ambiguous overload call to abs(double), but the answer there speculates that the code as above ought not to compile at all.