diff --git a/cmake/Modules/FindQuadMath.cmake b/cmake/Modules/FindQuadMath.cmake index b77ae720e44..7bfa0ad2148 100644 --- a/cmake/Modules/FindQuadMath.cmake +++ b/cmake/Modules/FindQuadMath.cmake @@ -84,9 +84,19 @@ if(QuadMath_FOUND AND NOT TARGET QuadMath::QuadMath) __float128 b=10; __float128 c=std::atan(b); }" QuadMath_HAS_MATH_OPS) + check_cxx_source_compiles(" + #include + int main() + { + __float128 b=10; + __float128 c=std::abs(b); + }" QuadMath_HAS_MATH_ABS) cmake_pop_check_state() # Reset CMAKE_REQUIRED_XXX variables if(QuadMath_HAS_MATH_OPS) target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_MATH_OPERATORS=1) endif() + if(QuadMath_HAS_MATH_ABS) + target_compile_definitions(QuadMath::QuadMath INTERFACE QUADMATH_HAS_MATH_ABS=1) + endif() cmake_pop_check_state() # Reset CMAKE_REQUIRED_XXX variables endif() diff --git a/opm/material/common/quad.hpp b/opm/material/common/quad.hpp index 2ebd63caf88..9dc0c84a571 100644 --- a/opm/material/common/quad.hpp +++ b/opm/material/common/quad.hpp @@ -267,6 +267,11 @@ inline typename std::istream& operator>>(std::istream& is, quad& val) } #endif +#if !QUADMATH_HAS_MATH_ABS +inline quad abs(quad val) +{ return (val < 0) ? -val : val; } +#endif + #if !QUADMATH_HAS_MATH_OPERATORS inline quad real(quad val) { return val; } @@ -280,9 +285,6 @@ inline quad imag(quad) inline quad imag(const std::complex& val) { return val.imag(); } -inline quad abs(quad val) -{ return (val < 0) ? -val : val; } - inline quad floor(quad val) { return floorq(val); }